生命的一维游戏

时间:2015-09-28 20:28:44

标签: algorithm bit-shift conways-game-of-life

这个问题是基于康威生命游戏的分拆。 点击here

基于作者提供的解决方案

 `#include <cstdio>
  #include <cstring>

  int N;
  long long rot(long long x, int amt){
    return ((x<<amt)|(x>>(N-amt)))&((1ll<<N)-1);
}

   int main(){
    char in[51];
    int T;
    scanf("%d", &T);
    while(T--){
        scanf("%s", in);
        N=strlen(in);
        long long cur=0, orig=0;
        for(int i=0; i<N; i++)
            cur|=(long long)(in[i]-'0')<<i;
        for(int i=0; i<N; i++)
            if((i%3)!=(2*N%3))
                orig^=rot(cur, i);
        if((N%3)==0){
            if(orig==0)
                puts("Multiple solutions");
            else
                puts("No solution");
        }else{
            for(int i=0; i<N; i++)
                putchar('0'+((orig>>i)&1));
            putchar('\n');
        }
    }
    return 0;
}
`

你能解释一下&#34; if&#34;条件if((i%3)!=(2*N%3))有助于实现。

您还可以详细说明编辑[https://discuss.codechef.com/questions/4202/life-editorial?sort=oldest]中提供的第二个解决方案,因为模拟步骤(A<<<1)^A^(A>>>1)不满足任何测试用例。

0 个答案:

没有答案