博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【贪心】Google Code Jam Round 1A 2018 Waffle Choppers
阅读量:6982 次
发布时间:2019-06-27

本文共 1748 字,大约阅读时间需要 5 分钟。

题意:给你一个矩阵,有些点是黑的,让你横切h刀,纵切v刀,问你是否能让切出的所有子矩阵的黑点数量相等。

设黑点总数为sum,sum必须能整除(h+1),进而sum/(h+1)必须能整除(v+1)。

先考虑横行,贪心地扫过去,如果到了某一行,当前统计的黑点数恰好为sum/(h+1),就在这里切一刀,接着统计。否则,如果>sum/(h+1),则无解。在这个过程中,每一行被切到哪一横组里就确定了。

然后纵切,过程跟横切类似,只不过统计的不是一个变量,而是一个大小为(h+1)的数组,如果到了某一列,当前统计的数组的每个分量的黑点数恰好为sum/(h+1)/(v+1),就在这里切一刀,接着统计。否则,如果数组的某个分量>sum/(h+1),则无解。

#include
#include
using namespace std;int T,n,m,h,v;char a[105][105];int hq[105];int cnts[105],t;bool check1(){ for(int i=1;i<=h+1;++i){ if(cnts[i]!=t){ return 0; } } return 1;}bool check2(){ for(int i=1;i<=h+1;++i){ if(cnts[i]>t){ return 0; } } return 1;}int main(){ //freopen("a.in","r",stdin); scanf("%d",&T); for(int zu=1;zu<=T;++zu){ printf("Case #%d: ",zu); scanf("%d%d%d%d",&n,&m,&h,&v); for(int i=1;i<=n;++i){ scanf("%s",a[i]+1); } int sum=0; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ sum+=(a[i][j]=='@'); } } if(sum%(h+1)!=0){ puts("IMPOSSIBLE"); continue; } t=sum/(h+1); int cnt=0; bool flag=1; int last=0,num=0; for(int i=1;i<=n;++i){ for(int j=1;j<=m;++j){ cnt+=(a[i][j]=='@'); } if(cnt==t){ ++num; for(int k=last+1;k<=i;++k){ hq[k]=num; } last=i; cnt=0; } else if(cnt>t){ flag=0; break; } } if(!flag){ puts("IMPOSSIBLE"); continue; } if(sum/(h+1)%(v+1)!=0){ puts("IMPOSSIBLE"); continue; } t=sum/(h+1)/(v+1); memset(cnts,0,sizeof(int)*(2+h)); flag=1; for(int i=1;i<=m;++i){ for(int j=1;j<=n;++j){ cnts[hq[j]]+=(a[j][i]=='@'); } if(check1()){ memset(cnts,0,sizeof(int)*(2+h)); } else if(!check2()){ flag=0; break; } } if(!flag){ puts("IMPOSSIBLE"); continue; } puts("POSSIBLE"); } return 0;}

转载于:https://www.cnblogs.com/autsky-jadek/p/8837036.html

你可能感兴趣的文章
Java中的List
查看>>
Mycat原理、应用场景
查看>>
几种进程间的通信方式
查看>>
算法笔记_120:蓝桥杯第六届省赛(Java语言B组部分习题)试题解答
查看>>
第二百一十七节,jQuery EasyUI,NumberSpinner(数字微调)组件
查看>>
Linq使用Group By
查看>>
三个简单的问题,让你顺势而为
查看>>
安全测试报告解读
查看>>
Golang适合高并发场景的原因分析
查看>>
iOSTableview 禁止下拉,允许上拉
查看>>
PHP:第三章——PHP中控制函数的函数
查看>>
vjue 点击发送邮件如何处理
查看>>
IDEA初始化配置
查看>>
PCA主成分分析Python实现
查看>>
基于Docker的TensorFlow机器学习框架搭建和实例源码解读
查看>>
考勤问题思路和解决
查看>>
Xcode6.3 怎样使用Leaks查看内存泄露
查看>>
vagrant系列四:vagrant搭建redis与redis的监控程序redis-stat
查看>>
IIS 7 及以上 IIS错误页“编辑功能设置...”提示“锁定冲突”
查看>>
【分布式】1、CAP原则(CAP定理)、BASE理论
查看>>