codeforces837B Flag on Berland

来源:互联网 发布:淘宝游戏专营怎么进入 编辑:程序博客网 时间:2024/06/16 11:25

非常蛋疼的一道模拟……昨天调试写的文件输出没改结果没有过orz


题意大概是这样的:有一个国旗,由三种颜色’R”G”B’构成,要求这三种颜色将国旗分为等宽的3条,这些条可以是横的,可以是竖的,输入长、宽和国旗形状问是否满足。
那么我们可以分四种情况讨论:长宽都不是3的倍数,则一定不满足;长是3的倍数而宽不是,则从长判断;宽是而长不是,则从宽判断;长宽都是,那就分别立两个flag判断。判断方法大同小异,所以我写了个比较臃肿的代码。

#include <bits/stdc++.h>using namespace std;#define MAXN 103char a[MAXN][MAXN];int main(){    int n,m;    cin>>n>>m;    for(int i=1;i<=n;++i)        for(int j=1;j<=m;++j)            cin>>a[i][j];    if(n%3!=0&&m%3!=0){        cout<<"No"<<endl;    }    else if(n%3==0&&m%3!=0){        int p=n/3;        for(int i=1;i<=n;++i){            for(int j=1;j<=m;++j){                if(j>1)                    if(a[i][j]!=a[i][j-1]){//每一横条相等                        cout<<"No"<<endl;                        return 0;                    }                if(i%p!=1&&p!=1)                    if(a[i][j]!=a[i-1][j]){//相邻n/3个竖条相等                        cout<<"No"<<endl;                        return 0;                    }            }        }        cout<<"Yes"<<endl;    }    else if(n%3!=0&&m%3==0){        int p=m/3;        for(int i=1;i<=n;++i){            for(int j=1;j<=m;++j){                if(i>1)                    if(a[i][j]!=a[i-1][j]){                        cout<<"No"<<endl;                        return 0;                    }                if(j%p!=1&&p!=1)                    if(a[i][j]!=a[i][j-1]){                        cout<<"No"<<endl;                        return 0;                    }            }        }        cout<<"Yes"<<endl;            }    else{        int p=n/3,q=m/3;        bool flag1=true,flag2=true;        for(int i=1;i<=n;++i){            for(int j=1;j<=m;++j){                if(flag1&&j>1)                    if(a[i][j]!=a[i][j-1]){                        flag1=false;                    }                if(flag1&&i%p!=1&&p!=1)                    if(a[i][j]!=a[i-1][j]){                        flag1=false;                    }                if(flag2&&i>1)                    if(a[i][j]!=a[i-1][j]){                        flag2=false;                    }                if(flag2&&j%q!=1&&q!=1)                    if(a[i][j]!=a[i][j-1]){                        flag2=false;                    }                if((!flag1)&&(!flag2)){                    cout<<"No"<<endl;                        return 0;                    }            }                       }    cout<<"Yes"<<endl;     }    return 0;    }

果然模拟超级锻炼代码能力啊orz

原创粉丝点击