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 }
                    
                
                
            
        
浙公网安备 33010602011771号