uva 11737 Extreme Primitive Society

这是一个大水题,但是英语捉急就跪了……

题目意思是:给你几组原始基因(w,h),基因可以杂交也可以自交产生新基因(
新的一代)。新基因可以变异(w+/-1 or/and h+/-1),也可以不变。让你输出能产生w==h的最小世代数。

思路:先判断原始基因有没有w == h的,如果有则输出0;

如果存在wi == hj ( i != j ),那么输出1(需要一次杂交把这两个基因进行结合);

其他情况,找出所有基因中w和h的差的绝对值最小的 mini,则需要的世代数就是(mini+1)/2 (向上取整)。

#include <iostream>
#include<stdio.h>
#include<stdlib.h>
#define INF 100000000
using namespace std;
int w[INF],h[INF];
int main()
{
    int n;
    int cas = 1;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i = 0;i < n;i++)
        {
            scanf("%d %d",&w[i],&h[i]);
        }
        int mini = INF;
        int ok;
        for(int i = 0;i < n;i++)
            for(int j = 0; j < n;j++)
            {
                int temp1 = abs(w[i] - h[i]);
                if(temp1 == 0)
                {
                    ok = 1;
                    mini = temp1;
                }
                int temp = abs(w[i] - h[j]);
                if(temp < mini)
                {
                    ok = 0;
                    mini = temp;
                }
            }
            if(ok && mini == 0)
            {
                printf("Case %d : %d\n",cas++,0);
            }
            else if(ok == 0 && mini == 0)
            {
                printf("Case %d : %d\n",cas++,1);
            }
            else
                printf("Case %d : %d\n",cas++,(mini+1)/2);
    }
    return 0;
}


你可能感兴趣的:(uva 11737 Extreme Primitive Society)