CodeForces 426BSereja and Mirroring

来源:互联网 发布:c语言写gui 编辑:程序博客网 时间:2024/05/17 20:31

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


0 0
原创粉丝点击