• E. Polycarp and Snakes


    https://codeforces.com/contest/1185/problem/E

    题意:在矩阵上,用a~z代表,然后后来画的可以覆盖掉之前画的,问可行方法是怎么画的

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int M=2200;
     4 int x1[27],x2[27],y[27],yy[27];
     5 char fir[M][M],sec[M][M];
     6 
     7 
     8 int main(){
     9     int t;
    10     ios::sync_with_stdio(false);
    11     cin>>t;
    12     while(t--){
    13         int n,m;
    14         cin>>n>>m;
    15         for(int i=1;i<=26;i++)
    16             x1[i]=x2[i]=y[i]=yy[i]=0;
    17         int maxx=0;
    18         for(int i=1;i<=n;i++)
    19             for(int j=1;j<=m;j++){
    20                 cin>>fir[i][j];
    21                 int x=fir[i][j]-'a'+1;
    22                 sec[i][j]='.';
    23                 if(fir[i][j]=='.')
    24                     continue;
    25                 maxx=max(maxx,x);
    26                 if(x1[x]==0)
    27                     x1[x]=i,y[x]=j;
    28                 x2[x]=i,yy[x]=j;
    29             }
    30         if(maxx==0){
    31             cout<<"YES"<<endl;
    32             cout<<"0"<<endl;
    33             continue;
    34         }
    35         int flag=0;
    36         for(int i=1;i<=maxx;i++){
    37             if(x1[i]==0)
    38                 x1[i]=x2[i]=x1[maxx],y[i]=yy[i]=y[maxx];
    39             if(x1[i]!=x2[i]&&y[i]!=yy[i]){
    40                 flag=1;
    41                 break;
    42             }
    43             for(int j=x1[i];j<=x2[i];j++)
    44                 for(int k=y[i];k<=yy[i];k++)
    45                     sec[j][k]='a'+i-1;
    46         }
    47         if(flag){
    48             cout<<"NO"<<endl;
    49             continue;
    50         }
    51         for(int i=1;i<=n;i++){
    52             for(int j=1;j<=m;j++)
    53                 if(fir[i][j]!=sec[i][j]){
    54                     flag=1;
    55                     break;
    56                 }
    57             if(flag)
    58                 break;
    59         }
    60         if(flag){
    61             cout<<"NO"<<endl;
    62             continue;
    63         }
    64         cout<<"YES"<<endl;
    65         cout<<maxx<<endl;
    66         for(int i=1;i<=26;i++){
    67             if(x1[i]==0)
    68                 break;
    69             cout<<x1[i]<<" "<<y[i]<<" "<<x2[i]<<" "<<yy[i]<<endl;
    70             
    71             
    72         }
    73             
    74     }
    75     return 0;
    76 }
    View Code
  • 相关阅读:
    在SQL Server中保存和输出图片 (转)
    Oracle 和 IBMDB2 连接字符串
    DataSet中 新增 唯一键 外键
    ORACLE的数据类型
    window.event的属性
    学习资料下载
    防止 刷新 重做
    常用正则表达式 (转)
    JS 定时器 (setInterval 和 setTimeout 函数)
    ASP.NET 2.0 – 善用DataSourceMode属性 (转自章立民CnBlogs)
  • 原文地址:https://www.cnblogs.com/starve/p/11067298.html
Copyright © 2020-2023  润新知