uva 11737 Extreme Primitive Society

来源:互联网 发布:京东金融 人工智能 编辑:程序博客网 时间:2024/06/02 07:17

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

题目意思是:给你几组原始基因(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 100000000using 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;}


原创粉丝点击