nbut 1218 You are my brother 一道值的思考的题目

来源:互联网 发布:网络逃犯查询 编辑:程序博客网 时间:2024/05/23 12:17
  • 1218] You are my brother

  • 时间限制: 1000 ms 内存限制: 131072 K
  • 问题描述
  • Little A gets to know a new friend, Little B, recently. One day, they realize that they are family 500 years ago. Now, Little A wants to know whether Little B is his elder, younger or brother.
  • 输入
  • There are multiple test cases.
    For each test case, the first line has a single integer, n (n<=1000). The next n lines have two integers a and b (1<=a,b<=2000) each, indicating b is the father of a. One person has exactly one father, of course. Little A is numbered 1 and Little B is numbered 2.
    Proceed to the end of file.
  • 输出
  • For each test case, if Little B is Little A’s younger, print “You are my younger”. Otherwise, if Little B is Little A’s elder, print “You are my elder”. Otherwise, print “You are my brother”. The output for each test case occupied exactly one line.
  • 样例输入
  • 51 32 43 54 65 661 32 43 54 65 76 7
  • 样例输出
  • You are my elderYou are my brother
  • 提示
  • 来源
  • 辽宁省赛2010
  • 操作

 

   对于这个题目,其实难度并不是很大,但是我仍旧在周赛时用了这么久才得以过,不能不说很丢人,总的做法不过三种

 

#include <iostream>#include <cstdio>using namespace std;int main(){ int n,i,j,k; int la,lb,a,b; while(scanf("%d",&n)!=EOF) {     la=1;lb=2;a=0;b=0;  for(k=0;k<n;++k)  {      scanf("%d%d",&i,&j);      if(la!=lb)      {                if(i==la)                {                    la=j;                    a++;                }                if(i==lb)                {                    lb=j;                    b++;                }      }  } if(a<b)           cout<<"You are my younger"<<endl;        else if(a==b)           cout<<"You are my brother"<<endl;        else if(a>b)           cout<<"You are my elder"<<endl; } return 0;}

#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>using namespace std;int main(){int n;int ans[2005];while(scanf("%d",&n)!=EOF){memset(ans,0,sizeof(ans));for(int i=0;i<n;i++){  int a,b;  scanf("%d%d",&a,&b);  ans[a]=b;}int temp=1;int num1=0;int num2=0;while(ans[temp]!=0){num1++;temp=ans[temp];}temp=2;while(ans[temp]!=0){num2++;temp=ans[temp];}if(num1>num2)printf("You are my elder\n");else if(num1==num2)printf("You are my brother\n");else    printf("You are my younger\n");}return 0;}

 


#include <iostream>#include <cstdlib>#include <cstdio>#include <time.h>#include <queue>#include <cstring>using namespace std;int fa[2010];int H;int Find(int x){    while(x != fa[x])    {        x = fa[x];        H++;    }    return x;}int main(){    int n;    int i,u,v;    while(scanf("%d",&n) != EOF)    {        for(i = 1;i <= 2000; ++i)        {            fa[i] = i;        }        while(n--)        {            scanf("%d %d",&u,&v);            fa[u] = v;        }        H = 0;        int f1 = Find(1);        int h1 = H;        H = 0;        int f2 = Find(2);        int h2 = H;        if(f1 != f2)        {            printf("You are my brother\n");        }        else        {            if(h1 < h2)            {                printf("You are my younger\n");            }            else if(h1 > h2)            {                printf("You are my elder\n");            }            else            {                printf("You are my brother\n");            }        }    }    return 0;}


 

0 0
原创粉丝点击