码迷,mamicode.com
首页 > 其他好文 > 详细

D. Feeding Chicken(构造)

时间:2019-12-07 18:02:31      阅读:77      评论:0      收藏:0      [点我收藏+]

标签:ons   pac   个数   ring   namespace   --   lse   题目   矩阵   

题目大意:将k个鸡放到一个n*m的矩阵中,要求每个鸡所占的rice的个数只差最小

 

题解:构造,设一共有cnt个rice,可以分cnt/k个,即每一只鸡要么占用cnt/k个rice,要么占cnt/k+1个rice。蛇形跑一边矩阵即可。

注意:要判断当前鸡的个数,即如果当前鸡的个数达到k个,那么放置完毕,鸡的数量不能再增长,而且剩下的格子一定是"."。

#include<bits/stdc++.h>
using namespace std;
const int N=1E2+7;
char arr[N][N];
char mark[N][N];
string s="1abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
void solve(){
    int n,m,k;
    scanf("%d%d%d",&n,&m,&k);
    for(int i=1;i<=n;i++)   scanf("%s",arr[i]+1);
    int cnt=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(arr[i][j]==R) cnt++;
    int x=cnt/k;
    int a=cnt%k;
    int pos=1;
    int sum=0;
    for(int i=1;i<=n;i++){
        if(i&1){
            for(int j=1;j<=m;j++){
                if(arr[i][j]==R){
                    sum++;
                    if(pos<=k-a){
                        if(sum<x) mark[i][j]=s[pos];
                        else {
                            mark[i][j]=s[pos];
                            if(pos<k)
                                pos++;
                            sum=0;
                        }
                    }
                    else {
                        if(sum<x+1) mark[i][j]=s[pos];
                        else {
                            mark[i][j]=s[pos];
                            if(pos<k)
                                pos++;
                            sum=0;
                        }
                    }
                }
                else mark[i][j]=s[pos];
            }
        }
        else {
             for(int j=m;j>=1;j--){
                if(arr[i][j]==R){
                    sum++;
                    if(pos<=k-a){
                        if(sum<x) mark[i][j]=s[pos];
                        else {
                            mark[i][j]=s[pos];
                            if(pos<k) pos++;
                            sum=0;
                        }
                    }
                    else {
                        if(sum<x+1) mark[i][j]=s[pos];
                        else {
                            mark[i][j]=s[pos];
                            if(pos<k) pos++;
                            sum=0;
                        }
                    }
                }
                else mark[i][j]=s[pos];
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            printf("%c",mark[i][j]);
        }
        printf("\n");
    }
}
int main(){
    int t;
    scanf("%d",&t);
    while(t--) solve();
    return 0;
}

 

D. Feeding Chicken(构造)

标签:ons   pac   个数   ring   namespace   --   lse   题目   矩阵   

原文地址:https://www.cnblogs.com/Accepting/p/12002591.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!