皮卡丘的party

Problem Description

去年冬天,皮卡丘认识了大家,因此皮卡丘决定给大家举办一场欢快的party。

这次party最大的活动就是宝可梦对战大赛,这次比赛是一场淘汰赛,由2^n位训练家进行n轮1v1的对战。每轮对战后,胜者晋级,败者淘汰,最终决出冠军。

训练家使用的宝可梦分为水、火、草三种属性,其中火属性宝可梦可以战胜草属性宝可梦,水属性宝可梦可以战胜火属性宝可梦,草属性宝可梦可以战胜水属性宝可梦,相同属性进行对战时则比拼宝可梦实力。

现在选手都已经领到了自己的编号,第一轮会由1号和2号进行对战,3号和4号进行对战……第二轮自然就是1号与2号之间的胜利者对战3号与4号之间的胜利者……

请你准确的预测一下本次宝可梦对战大赛的冠军会使用什么属性的宝可梦。

Input

第一行输入一个整数n(2<=n<=10),代表会进行n轮比赛。

第二行按编号顺序输入2^n个整数,整数范围为1、2、3,其中1代表训练家使用水属性宝可梦,2代表训练家使用火属性宝可梦,3代表训练家使用草属性宝可梦。

Output

输出一个整数,代表最终冠军使用的宝可梦的属性。

Sample Input

3
1 3 2 1 2 3 1 2

Sample Output

3
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
int main()
{
    int n,i,j,a[10000],b[10000];
    scanf("%d",&n);
    n=pow(2,n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    while(n!=1)
    {
        j=0;
        for(i=0;i<n;i++)
        {
            if(a[i]==1)
            {
                if(a[i+1]==2)
                    b[j++]=a[i];
                else if(a[i+1]==3)
                    b[j++]=a[i+1];
                else if(a[i+1]==1)
                    b[j++]=a[i];
            }
            else if(a[i]==2)
            {
                if(a[i+1]==1)
                    b[j++]=a[i+1];
                else if(a[i+1]==2)
                    b[j++]=a[i];
                else if(a[i+1]==3)
                    b[j++]=a[i];
            }
            else if(a[i]==3)
            {
                 if(a[i+1]==1)
                    b[j++]=a[i];
                else if(a[i+1]==2)
                    b[j++]=a[i+1];
                else if(a[i+1]==3)
                    b[j++]=a[i];
            }
            i++;
        }
        memcpy(a,b,sizeof(a));
        n=n/2;
    }
    printf("%d\n",b[0]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/moyefly/article/details/80357087