题意

https://vjudge.net/problem/CodeForces-1255D

rxc的农场里'R'表示有米,现在有K只鸡,给这k只鸡选一些格子,每个鸡可以有多个格子(每个鸡至少吃一个米),但是每个鸡的格子必须连通。问吃到最多的米和最少的米的差最小是多少。

思路

如果农场一共有cnt个米,那么最优的分配肯定是差值为1或0,即给每个鸡先分cnt/k个米,然后把多余的分配给每个鸡。因为鸡的格子必须是连通的,所以可以考虑类似蛇形填数的方法,每找到cnt/k(多余的类似)个米就换下一只鸡,这样就能保证是连通而且差值最小了。

代码写的有点冗长,我的判断退出的方法是判断当前点的上下左右是否被填过(先把所有位置都赋值成填过,再把rxc的位置赋值为未填过),如果都填过了,那么就结束。

代码

#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=105;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
char g[N][N],ch,res[N][N];
int a,b,now,vis[N][N],r,c,k;
void gao(int i,int j)
{
vis[i][j]=1;
if(now<a+1&&b)
{
if(g[i][j]=='R')
now++;
res[i][j]=ch;
if(now==a+1)
{
now=0,b--,k--;
if(k<=0)
return ;
if(ch=='9')
ch='A';
else if(ch=='Z')
ch='a';
else ch++;
}
}
else if(now<a&&b==0)
{
if(g[i][j]=='R')
now++;
res[i][j]=ch;
if(now==a)
{
now=0;
k--;
if(k<=0)
return ;
if(ch=='9')
ch='A';
else if(ch=='Z')
ch='a';
else ch++;
}
} }
int main()
{
std::ios::sync_with_stdio(false);
int t;
cin>>t;
while(t--)
{
memset(vis,-1,sizeof(vis));
int cnt=0;
cin>>r>>c>>k;
for(int i=1; i<=r; i++)
for(int j=1; j<=c; j++)
vis[i][j]=0;
for(int i=1; i<=r; i++)
{
cin>>g[i]+1;
for(int j=1; j<=c; j++)
{
if(g[i][j]=='R')
cnt++;
}
}
a=cnt/k,b=cnt%k,now=0;
int L=1,R=c,U=2,D=r,i=1,j=1;
ch='0';
while(1)
{
int f=0;
while(j<=R)
{
gao(i,j);
j++;
f=1;
}
if(f)
j--; if(vis[i+1][j]&&vis[i-1][j]&&vis[i][j+1]&&vis[i][j-1])
break;
i++;
// cout<<"ggg:"<<i<<" "<<j<<endl;
f=0;
R--;
while(i<=D)
{
gao(i,j);
i++;
f=1;
}
if(f)
i--; if(vis[i+1][j]&&vis[i-1][j]&&vis[i][j+1]&&vis[i][j-1])
break;
j--;
D--;
// cout<<"gg:"<<i<<" "<<j<<endl;
f=0;
while(j>=L)
{
gao(i,j);
j--;
f=1;
}
if(f)
j++; if(vis[i+1][j]&&vis[i-1][j]&&vis[i][j+1]&&vis[i][j-1])
break;
i--;
L++;
// cout<<"gg:"<<i<<" "<<j<<endl;
f=0;
while(i>=U)
{
gao(i,j);
i--;
f=1;
}
if(f)
i++; if(vis[i+1][j]&&vis[i-1][j]&&vis[i][j+1]&&vis[i][j-1])
break;
j++;
U++;
// cout<<"gg:"<<i<<" "<<j<<endl;
}
for(int i=1; i<=r; i++)
{
for(int j=1; j<=c; j++)
{
cout<<res[i][j];
}
cout<<endl;
} }
return 0;
}

  

CodeForces - 1255D (模拟+构造+贪心)的更多相关文章

  1. CF733C Epidemic in Monstropolis[模拟 构造 贪心]

    C. Epidemic in Monstropolis time limit per test 1 second memory limit per test 256 megabytes input s ...

  2. Tea Party CodeForces - 808C (构造+贪心)

    Polycarp invited all his friends to the tea party to celebrate the holiday. He has ncups, one for ea ...

  3. codeforces 704B - Ant Man 贪心

    codeforces 704B - Ant Man 贪心 题意:n个点,每个点有5个值,每次从一个点跳到另一个点,向左跳:abs(b.x-a.x)+a.ll+b.rr 向右跳:abs(b.x-a.x) ...

  4. 学习xss模拟构造攻击(第一篇)

    本文作者:i春秋签约作家——rosectow 0×00前言 XSS又名叫CSS全程(cross site scriptting),中文名跨站脚本攻击,目前网站的常见漏洞之一,它的危害没有像上传漏洞,s ...

  5. CodeForces - 50A Domino piling (贪心+递归)

    CodeForces - 50A Domino piling (贪心+递归) 题意分析 奇数*偶数=偶数,如果两个都为奇数,最小的奇数-1递归求解,知道两个数都为1,返回0. 代码 #include ...

  6. codeforces 1041 e 构造

    Codeforces 1041 E 构造题. 给出一种操作,对于一棵树,去掉它的一条边.那么这颗树被分成两个部分,两个部分的分别的最大值就是这次操作的答案. 现在给出一棵树所有操作的结果,问能不能构造 ...

  7. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) A B C D 水 模拟 构造

    A. Neverending competitions time limit per test 2 seconds memory limit per test 512 megabytes input ...

  8. CodeForces ---596B--Wilbur and Array(贪心模拟)

    Wilbur and Array Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Su ...

  9. Codeforces 452D [模拟][贪心]

    题意: 给你k件衣服处理,告诉你洗衣机烘干机折叠机的数量,和它们处理一件衣服的时间,要求一件衣服在洗完之后必须立刻烘干,烘干之后必须立刻折叠,问所需的最小时间. 思路: 1.按照时间模拟 2.若洗完的 ...

随机推荐

  1. cssW3c书写规范

    书写规范:{ 1.选择器名和{大括号之间必须空格(p {}) 2.属性名与之后的:之间不允许空格,:与属性值之间必须空格( p{font-size: 20px;}) 3.并集选择器的每个选择器声明必须 ...

  2. vue的类element的input类型组件封装

    前提:题主之前只是随意的封装,项目统一ui,然后只实现了父组件拿子组件值,没有实现父组件修改子组件的值,仔细看了文档才知道用model的作用,直接上代码 Vue.component("bas ...

  3. MySQL数据库:在命令提示符中使用mysql

    服务启动 在命令提示符中 启动mysql服务 net start mysql 停止mysql服务 net sotp mysql 通过命令行进入 mysql -u 用户名 -p 键入后会提示输入密码 如 ...

  4. 小程序组件化开发框架---wepy 项目创建

    wepy是一个优秀的微信小程序组件化框架,突破了小程序的限制,支持了npm包加载以及组件化方案.这里就以我个人的经历讲下怎么创建wepy项目. 1.首先 在桌面(自己选定目录下)新建一个文件夹,注意需 ...

  5. sso单点登录系统的压力测试

    环境:vmware centos7.4 2cpu 2核心 工具:ab压力测试工具 测试对象:sso单点登录系统 电脑:win10 4核 项目环境:flask+uwsgi+nginx(uwsgi 2进程 ...

  6. The Preliminary Contest for ICPC Asia Shenyang 2019

    传送门 B. Dudu's maze 题意: 是什么鬼东西???我读题可以读半小时QAQ 给出一张无向图,一个人在里面收集糖果,每个点都有一个糖果,特殊点除外.当他第一次进入特殊点时,会随机往一条边走 ...

  7. BZOJ1001/LG4001 「ICPC Beijing2006」狼抓兔子 平面图最小割转对偶图最短路

    问题描述 BZOJ1001 LG4001 题解 平面图最小割=对偶图最短路 假设起点和终点间有和其他边都不相交的一条虚边. 如图,平面图的若干条边将一个平面划分为若干个图形,每个图形就是对偶图中的一个 ...

  8. c语言文件

    完整代码块展示: #include <stdio.h> #include <stdlib.h> #include <string.h> struct student ...

  9. codeforces 1260C. Infinite Fence (数学or裴蜀定理)

    只需要验证小间隔在大间隔之间有没有连续的k个 设小间隔为a,大间隔为b,那么a在b之间出现的次数在\(\lfloor \frac{b}{a}\rfloor\)或者\(\lfloor \frac{b}{ ...

  10. Eclipse Memory Analyzer(MAT),内存泄漏插件,安装使用一条龙

    网上文档很多,但最初都有问题.整理一份,作为备份.使用过程:开发代码写完后,对可能出现内存溢出的代码,添加配置文件,生成.hprof文件,用memory Analyzer分析排查问题,且泄漏内存大小可 ...