题目链接:点击查看

题目大意:给出一个n*m的农场,其中'.'代表空地,'R'代表大米,现在有k只鸡需要分布在这个农场之中,需要满足以下条件:

  1. 每个方格都要被鸡占领
  2. 每只鸡至少占领一个方格
  3. 每只鸡占领的方格必须连通,并且设所占领的大米数为cnt
  4. 要求每只鸡占领的cnt最大值与最小值差值最小

用0~9,a~z以及A~Z代表62只鸡,要求构造合适的占领方案

题目分析:因为要求每只鸡占领的方格连通,所以我们直接连通的跑完整个矩阵就好了,可以选择S形遍历,也可以选择回字形遍历,不管怎么样,只要保证前后连通即可,既然题目要求占有大米的值最大值与最小值差值最小,我们让其差值为0或1就可以了,0或1主要取决于大米的数量能否整除鸡的数量,合理分配就好了

注意一下,我一开始写的代码在test2WA掉了,想了半天找不到错误,去cf拿数据看了一眼,这里放上来可以调试一下吧:

2 9 3
.R..R..R.
.R..R..R.

ans:

000001111
222222211

别的就没什么注意的了,我用的S形遍历,自认为写的还是比较清晰简单的吧

代码:

#include<iostream>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<cmath>
#include<cctype>
#include<stack>
#include<queue>
#include<list>
#include<vector>
#include<set>
#include<map>
#include<sstream>
using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const int N=110;const string ss="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";char maze[N][N],ans[N][N];int target,sum,cnt1,cnt2,pos;void solve(int x,int y)//处理每个方块
{ans[x][y]=ss[pos];if(maze[x][y]=='R')sum++;if(cnt1)//如果target+1的方块还没处理完,优先处理{if(sum==target+1){cnt1--;pos++;sum=0;}}else if(sum==target&&cnt2)//最后处理target的方块{cnt2--;if(cnt2)//注意这里特判,到了最后一个方块后pos就不再加一了{pos++;sum=0;}}
} int main()
{
//  freopen("input.txt","r",stdin);
//  ios::sync_with_stdio(false);int w;cin>>w;while(w--){int n,m,k;memset(ans,0,sizeof(ans));//记得初始化scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=n;i++)scanf("%s",maze[i]+1);int cnt=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(maze[i][j]=='R')cnt++;target=cnt/k;//记录每个鸡需要占领的米,分别为target和target+1cnt1=cnt%k;//cnt1个鸡有target+1个R cnt2=k-cnt1;//cnt2个鸡有target个Rpos=0;//记录字符下标 sum=0;//记录当前的鸡占有多少米了 for(int i=1;i<=n;i++){if(i&1){for(int j=1;j<=m;j++)solve(i,j);}else{for(int j=m;j>=1;j--)solve(i,j);}} for(int i=1;i<=n;i++)printf("%s\n",ans[i]+1);}return 0;
}

CodeForces - 1255D Feeding Chicken(贪心+构造+模拟)相关推荐

  1. 【CodeForces 1255D --- Feeding Chicken】

    [CodeForces 1255D --- Feeding Chicken] Description Long is a huge fan of CFC (Codeforces Fried Chick ...

  2. CodeForces - 1301D Time to Run(构造+模拟)

    题目链接:点击查看 题目大意:给出一个n*m的矩阵,现在每两个格子之间都有一条双向的通道,初始时有个人在左上角的格子中,现在要求这个人精确的走 k 条路,不过每条路只能走一次,但是每个格子可以走无限次 ...

  3. CodeForces - 1265D Beautiful Sequence(贪心+构造+思维)

    题目链接:点击查看 题目大意:给出a个0,b个1,c个2,d个3,要求构造一种序列,使得数列两两之间绝对值之差等于1,若不能构造输出NO 题目分析:首先我们需要稍微讨论一下特殊情况,那就是对于两端的数 ...

  4. CodeForces - 1256C Platforms Jumping(贪心+构造)

    题目链接:点击查看 题目大意:现在固定人初始时在点0处,现在我们需要跨过长度为n的一条河,到达对岸的点n+1处,给出m个木板,我们可以将这m个木板随意摆放,但相对位置不能改变,并且只能互相接触而不能互 ...

  5. CodeForces - 1334D Minimum Euler Cycle(构造+模拟)

    题目链接:点击查看 题目大意:给出一个由 n 个顶点组成的完全图,求出一个从点 1 出发的欧拉回路,使得字典序最小,不知道欧拉回路的同学请自行百度 题目分析:字典序最小,那么就说明让序号小的顶点在前面 ...

  6. Codeforces Round #601 (Div. 2)D. Feeding Chicken,二维压一维,几何平面的分配

    D. Feeding Chicken 题目大意:就是给你一个r∗cr*cr∗c的矩阵,矩阵上若干个位置上有食物,你有k只小鸡,你要将这r∗cr*cr∗c的矩阵分成k个联通块给每个小鸡,使得有最大食物的 ...

  7. 贪心+构造 Codeforces Round #277 (Div. 2) C. Palindrome Transformation

    题目传送门 1 /* 2 贪心+构造:因为是对称的,可以全都左一半考虑,过程很简单,但是能想到就很难了 3 */ 4 /**************************************** ...

  8. D. Feeding Chicken(模拟)

    题目:D. Feeding Chicken 总结:要极大与极小的差最小,那么只有可能是0或者1.下面就是蛇形走位.分成k块,每一块最少要有cnt/k,并且要连续. #include <bits/ ...

  9. 【牛客 - 318G】LLLYYY的数字思维 与【牛客 - 289J】这是一个沙雕题II(贪心构造)

    题干: LLLYYY很喜欢写暴力模拟贪心思维.某一天在机房,他突然抛给了队友ppq一 个问题.问题如下: 有一个函数f (): int f(int x){     int tmp = 0;     w ...

最新文章

  1. jQuery:动态改变html表单的目标页(Target)
  2. 【知识星球】每日干货看图猜技术,你都会吗?
  3. [XPath] XPath 与 lxml (三)XPath 坐标轴
  4. HTML如何添加锚点,我先收藏为敬
  5. PaddleOCR服务器端部署C++ cpu或者gpu进行预测
  6. linux下搭建uvm环境,转:使用QuestaSIM进行UVM仿真环境搭建
  7. @程序员,你处在食物链哪级?有人跑车游轮到处玩,有人被房价羞辱,被平庸折磨...
  8. spring boot 使用 com.mysql.jdbc.Driver 和 com.mysql.cj.jdbc.Driver的区别
  9. 兼容所有浏览器的省略号--纯CSS策略
  10. 苹果Mac如何限制进程 CPU 资源占用?
  11. Spring Boot 中统一异常处理最佳实践介绍
  12. Linux Netcat command – The swiss army knife of net
  13. 若依最详细的配置(零基础,小白版)
  14. vscode中css文件格式化,css文件样式排版
  15. mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
  16. 中文和英文论文哪个比较容易发表
  17. Java 8 reduce 是什么
  18. 关于应用服务器和数据库服务器的区别浅谈
  19. 在EntityFramework中使用 nock的方法。
  20. 2022云和恩墨大讲堂·苏州站成功举办,论道数智化时代下国产数据库的技术创新与实践

热门文章

  1. 两线怎么接三线插座图_水温传感器怎么判断好坏
  2. 【思考?】什么时候会触发这个策略呢?
  3. ZkServer服务启动的逻辑-NIOServerCnxnFactory.configure
  4. ArrayBlockingQueue原理分析-take方法
  5. 执行SQL-获取缓存
  6. 会话创建过程-创建Executor
  7. Spring5的AOP 和设备支持
  8. Set集合存储元素不重复的原理
  9. Servlet_执行原理
  10. DoubleCheck双重检查实战及原理解析