貌似很久没写博客了,主要是由于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;
}