CF1254A Feeding Chicken ###K //K

题目链接:https://www.luogu.com.cn/problem/list?keyword=cf1254a&page=1

思路:直接R的总数除以分的块数  尽量平均分,  然后构造连通的时候 不能用dfs乱搞

S型的从左到右一直扫下去 确保能构造所有的R连通即可

  1 #include<bits/stdc++.h>
  2 using namespace std;
  3 #define ll long long
  4 #define pb push_back
  5 const int mod=998244353;
  6 const int maxn=3e5+10;
  7 char s[111][111];
  8 char ans[111][111];
  9 string g;
 10 int n,m;
 11 
 12 int main()
 13 {
 14     /*ios::sync_with_stdio(0);
 15     cin.tie(0);*/
 16     for(int i=0;i<=9;i++)
 17     {
 18         char d='0'+i;
 19         g+=d;
 20     }
 21     for(int i=0;i<26;i++)
 22     {
 23         char d='a'+i;
 24         char c='A'+i;
 25         g+=d;
 26         g+=c;
 27     }
 28     int t;
 29     cin>>t;
 30     while(t--)
 31     {
 32         int k;
 33         cin>>n>>m>>k;
 34         int sum=0;
 35         for(int i=1;i<=n;i++)
 36         {
 37             for(int j=1;j<=m;j++)
 38             {
 39                 cin>>s[i][j];
 40                 if(s[i][j]=='R')
 41                     sum++;
 42             }
 43         }
 44         int ji=0;
 45         int cnt=sum%k;
 46         int num=0;
 47         int tot=0;
 48         for(int i=1;i<=n;i++)
 49         {
 50             if(i%2)
 51             {
 52                 for(int j=1;j<=m;j++)
 53                 {
 54                     if(s[i][j]!='R')
 55                         ans[i][j]=g[tot];
 56                     else
 57                     {
 58                         num++;
 59                         if(ji<cnt)
 60                         {
 61                             if(num==sum/k+2)
 62                                 tot++,num=1,ji++;
 63                         }
 64                         else
 65                         {
 66                             if(num==sum/k+1)
 67                                 tot++,num=1;
 68                         }
 69                         ans[i][j]=g[tot];
 70                     }
 71                 }
 72             }
 73             else
 74             {
 75                 for(int j=m;j>=1;j--)
 76                 {
 77                     if(s[i][j]!='R')
 78                         ans[i][j]=g[tot];
 79                     else
 80                     {
 81                         num++;
 82                         if(ji<cnt)
 83                         {
 84                             if(num==sum/k+2)
 85                                 tot++,num=1,ji++;
 86                         }
 87                         else
 88                         {
 89                             if(num==sum/k+1)
 90                                 tot++,num=1;
 91                         }
 92                         ans[i][j]=g[tot];
 93                     }
 94                 }
 95             }
 96 
 97         }
 98         for(int i=1;i<=n;i++)
 99         {
100             for(int j=1;j<=m;j++)
101             {
102                 cout<<ans[i][j];
103             }
104             cout<<'\n';
105         }
106     }
107 
108 
109 
110 }
View Code

 

posted @ 2020-12-03 11:14  canwinfor  阅读(84)  评论(0)    收藏  举报