hdu6130-多校7&规律-Kolakoski

http://acm.hdu.edu.cn/showproblem.php?pid=6130
给定一个数列,是
1,2,2,1,1,2,1,2,2,1,2,2,1,1,2,1,1,2,2,1……、
他是怎么来的呢。
把相邻相同的项当成一组,发现时
1 22 11 2 1 22 1 22 11 2 11 22 1
那个数组就是 (把数组这样处理之后的长度的数列)
然后就打表,打的要多点(因为实际的长度比数组的长度要长,并且最多为2倍)

#include 

using namespace std;
const int l=10000007;
int a[40000007];
int main()
{   a[1]=1;
    int c=1;
    int y=1;
    for(int i=1;i<=l;i++){
        if(a[i]==0){
            if(a[i-1]==1) a[i]=2;
            else if (a[i-1]==2) a[i]=1;
        }
        int x=a[i];
        while(x--){
            a[c++]=y;
            }
         if(y==1) y=2;
         else if(y==2) y=1;
    }
   int t;
   int x;
   //for(int i=1;i<=100000;i++)
   // cout<
    scanf("%d",&t);
    while(t--){
          scanf("%d",&x);
          printf("%d\n",a[x]);
    }
    return 0;
}

你可能感兴趣的:(思维,多校)