貌似很久没写博客了,主要是由于C#大作业(哭,这个题是为数不多周赛没做出来又想起来继续回去做的(主要是由于这次收官之作成绩太惨烈),想来也确实不难,自己又一次把题想难了成狗的把自己绕进去了orz。一看到找镜面的折叠次数,非得用二进制结尾的0的个数把最小的层数表示出来,蠢不蠢??每次都折半多好呢→_→第二次看题的时候又误认为存在内部镜面对称、外部不是2的倍数的情况(好像没说明白,反正想的不对,不要在乎那些细节)上午改了一个半小时,晚上回来又改了半个小时终于过了,无非是while里面三个语句的顺序问题,想来还是自己太弱了,才几天没好好刷题就不在状态

///一直WA在第四组啊
#include <iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int num[105][105],n,m;
bool judge(int r)//r是半截的行数
{
    for(int i=0;i<r;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(num[i][j]!=num[2*r-i-1][j])
            {
                return true;
            }
        }
    }
    return false;
}
int main()
{
   // freopen("cin.txt","r",stdin);
    while(~scanf("%d%d",&n,&m))
    {
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                scanf("%d",&num[i][j]);
        if(n&1) printf("%d\n",n);
        else
        {
            bool flag=true;
            int i=n/2;
            while(i>0)
            {

                if(judge(i)) {flag=false;break;}
                if((i&1)&&i>1) break;
                i/=2;
            }
           // if((i&1)&&i>1) i*=2;
            if(!flag) i*=2;
            if(i==0) i=1;
           // printf("flag=%d  ",flag);
            printf("%d\n",i);
        }
    }
    return 0;
}