西安DAY1

今天第一天上课

内容:二分,三分,位运算,折半法

本来还想听一听退火可老师竟怂到

看了看A层题,觉得好无奈

T1输出了个2就回去听课了

听说supairy大佬A了T1,A层都如此NB吗?

要听A层讲解可以去看一看supairy的博客不知道他发不发

传送门

下面给出B层题题解

传送门

密码:xjzjd(相聚在交大)

 T1:

解释:无

解法:暴力

注意事项:1.一定要使得三种颜色全部出现

     2.n或m一定有整除3的

       3.只在能整除3的边上更新

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define gg c=getchar()
#define pd (c>='0'&&c<='9')
inline int read()
{
    int s=0;
    char gg;
    for(;!pd;gg);
    for(;pd;gg)s=(s<<1)+(s<<3)+c-'0';
    return s;
}
char c[1001][1001];
inline bool pd1(int n,int m)
{
    if(n%3!=0)return 0;
    n/=3;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            //cout<<c[i][j];
            if(c[i][j]!=c[1][1])
                return 0;
        }
    //  cout<<"\n";   
    for(int i=1+n;i<=n+n;i++)
        for(int j=1;j<=m;j++)
        {
            //cout<<c[i][j];
            if(c[i][j]!=c[1+n][1])
                return 0;
        }
    //  cout<<"\n";   
    for(int i=1+n+n;i<=n+n+n;i++)
        for(int j=1;j<=m;j++)
        {
            //cout<<c[i][j];
            if(c[i][j]!=c[1+n+n][1])
                return 0;
        }
            //cout<<"\n";
    if(c[1][1]+c[n+1][1]+c[n+n+1][1]=='R'+'G'+'B')return 1;
    return 0;
}
inline bool pd2(int n,int m)
{
    if(m%3!=0)return 0;
    m/=3;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            //cout<<c[i][j];
            if(c[i][j]!=c[1][1])
                return 0;
        }
    //  cout<<"\n";   
    for(int i=1;i<=n;i++)
        for(int j=1+m;j<=m+m;j++)
        {
            //cout<<c[i][j];
            if(c[i][j]!=c[1][1+m])
                return 0;
        }
    //  cout<<"\n";   
    for(int i=1;i<=n;i++)
        for(int j=1+m+m;j<=m+m+m;j++)
        {
            //cout<<c[i][j];
            if(c[i][j]!=c[1][1+m+m])
                return 0;
        }
            //cout<<"\n";
    if(c[1][1]+c[1][1+m]+c[1][1+m+m]=='R'+'G'+'B')return 1;
    return 0;
}
int main()
{
    int n=read(),m=read();
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            c[i][j]=getchar();
            while(c[i][j]!='R'&&c[i][j]!='B'&&c[i][j]!='G')c[i][j]=getchar();
        }
    }
    /*for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            cout<<c[i][j];
        }
        cout<<endl;
    }*/
    if(pd1(n,m))cout<<"YES";
    else if(pd2(n,m))cout<<"YES";
    else cout<<"NO";
}

T2:

点此更新

猜你喜欢

转载自www.cnblogs.com/yanghaokun/p/10118036.html