[Cometoj#4 C]方块切割_质因数分解_贪心
方块切割
题目链接:https://cometoj.com/contest/39/problem/C?problem_id=1583
数据范围:略。
题解:
首先,如果我们知道了多少道在行上,多少刀在列上,应该怎么办?
不难发现行和列是独立的,只需要分别保证各自均分了网格即可。
那么怎么切呢?只需要顺次枚举,能切就切即可。
至于怎么知道行和列各自切多少刀?
枚举呗
代码:
#include <bits/stdc++.h> #define N 1010 using namespace std; int r[N], c[N];
char a[N][N];
int s[N][N];
int ans[2 * N];
int x[N], y[N];
int n, m, k; int main() {
int T;
scanf("%d", &T);
while (T--) {
scanf("%d%d%d", &n, &m, &k);
for (int i = 1; i <= n; i++) {
r[i] = 0;
}
for (int i = 1; i <= m; i++) {
c[i] = 0;
}
int sum = 0;
for (int i = 1; i <= n; i++) {
scanf("%s", a[i] + 1);
for (int j = 1; j <= m; j++) {
if (a[i][j] == '0') {
r[i]++;
c[j]++;
sum++;
}
}
}
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1];
s[i][j] += a[i][j] == '0';
}
}
for (int i = 1; i <= k; i++) {
ans[i] = n + m - 1;
}
if (sum == 0) {
for (int i = 1; i < k; i++) {
printf("%d ", i);
}
printf("%d", k);
printf("\n");
continue;
}
for (int l = k; l >= 0; l--) {
if (sum % ((l + 1) * (k - l + 1))) continue;
int br = sum / (l + 1);
int bc = sum / (k - l + 1);
int b = sum / (l + 1) / (k - l + 1);
bool f = 1;
int cur = 0;
int X = 0;
for (int i = 1; i <= n; i++) {
cur += r[i];
if (cur == br) {
x[++X] = i;
cur = 0;
}
if (cur > br) f = 0;
}
cur = 0;
int Y = 0;
for (int i = 1; i <= m; i++) {
cur += c[i];
if (cur == bc) {
y[++Y] = i;
cur = 0;
}
if (cur > bc) f = 0;
}
for (int i = 1; i <= X; i++) {
for (int j = 1; j <= Y; j++) {
if (s[x[i]][y[j]] - s[x[i - 1]][y[j]] - s[x[i]][y[j - 1]] + s[x[i - 1]][y[j - 1]] != b) f = 0;
}
}
if (!f) continue;
for (int i = 1; i < X; i++) ans[i] = x[i];
for (int i = 1; i < Y; i++) ans[l + i] = y[i] + n - 1;
break;
}
if (ans[1] == n + m - 1) {
printf("Impossible\n");
}
else {
for (int i = 1; i < k; i++) {
printf("%d ", ans[i]);
}
printf("%d", ans[k]);
printf("\n");
}
}
return 0;
}
[Cometoj#4 C]方块切割_质因数分解_贪心的更多相关文章
- [bzoj4026]dC Loves Number Theory_主席树_质因数分解_欧拉函数
dC Loves Number Theory 题目大意:dC 在秒了BZOJ 上所有的数论题后,感觉萌萌哒,想出了这么一道水题,来拯救日益枯竭的水题资源. 给定一个长度为 n的正整数序列A,有q次询问 ...
- [bzoj1978][BeiJing2010]取数游戏 game_动态规划_质因数分解
取数游戏 game bzoj-1978 BeiJing-2010 题目大意:给定一个$n$个数的$a$序列,要求取出$k$个数.假设目前取出的数是$a_j$,那么下次取出的$a_k$必须保证:$j&l ...
- 【BZOJ-4514】数字配对 最大费用最大流 + 质因数分解 + 二分图 + 贪心 + 线性筛
4514: [Sdoi2016]数字配对 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 726 Solved: 309[Submit][Status ...
- BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数
BZOJ_4459_[Jsoi2013]丢番图_数学+分解质因数 Description 丢番图是亚历山大时期埃及著名的数学家.他是最早研究整数系数不定方程的数学家之一. 为了纪念他,这些方程一般被称 ...
- CF1139D Steps to One(DP,莫比乌斯反演,质因数分解)
stm这是div2的D题……我要对不住我这个紫名了…… 题目链接:CF原网 洛谷 题目大意:有个一开始为空的序列.每次操作会往序列最后加一个 $1$ 到 $m$ 的随机整数.当整个序列的 $\gcd ...
- 【2019.7.22 NOIP模拟赛 T1】麦克斯韦妖(demon)(质因数分解+DP)
暴力\(DP\) 先考虑暴力\(DP\)该怎么写. 因为每个序列之后是否能加上新的节点只与其结尾有关,因此我们设\(f_i\)为以\(i\)为结尾的最长序列长度. 每次枚举一个前置状态,判断是否合法之 ...
- 求n!质因数分解之后素数a的个数
n!质因数分解后P的个数=n/p+n/(p*p)+n/(p*p*p)+......直到n<p*p*p*...*p //主要代码,就这么点东西,数学真是厉害啊!幸亏我早早的就退了数学2333 do ...
- AC日记——质因数分解 1.5 43
43:质因数分解 总时间限制: 1000ms 内存限制: 65536kB 描述 已知正整数 n 是两个不同的质数的乘积,试求出较大的那个质数. 输入 输入只有一行,包含一个正整数 n. 对于60% ...
- 整数分解 && 质因数分解
输入整数(0-30)分解成所有整数之和.每四行换行一次. 一种方法是通过深度优先枚举出解.通过递归的方式来实现. #include <stdio.h> #include <strin ...
随机推荐
- python 赋值魔法
序列解包: >>> x,y,z = 1, 2, 3>>> print(x, y, z)1 2 3 >>> a,b, *reset = [1,2,3 ...
- 第一章:Python数据分析前的基础铺垫
本节概要 - 数据类型 - 数据结构 - 数据的常用操作方法 数据类型 基础铺垫 定义 我们搞数据时,首先要告诉Python我们的数据类型是什么 数值型:直接写一个数字即可 逻辑型:True,Fals ...
- 文件对比工具 Beyond Compare 4.2.9中文破解版for mac
链接:https://pan.baidu.com/s/1AsESVIYsn9Lv6qz2TfROrQ 密码:6o63链接:https://pan.baidu.com/s/1eiGgRHfPTEERlH ...
- Java并发指南13:Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析
Java7/8 中的 HashMap 和 ConcurrentHashMap 全解析 转自https://www.javadoop.com/post/hashmap#toc7 部分内容转自 http: ...
- idea内存不足或过大闪退
昨天在码云找了个开源后台项目https://gitee.com/shuzheng/zheng,各种修改后终于跑起来了, 运行没多久就提示内存不足,安装目录配置虚拟机最大可用内存为512M idea弹窗 ...
- 第11组 Beta冲刺(4/5)
第11组 Beta冲刺(4/5) 队名 不知道叫什么团队 组长博客 https://www.cnblogs.com/xxylac/p/12018586.html 作业博客 https://edu. ...
- (八)爬虫之js调试(登陆知乎)
上次爬取网易云音乐,折腾js调试了好久,难受....今天继续练练手,研究下知乎登陆,让痛苦更猛烈些. 1.简单分析 很容易就发现登陆的url=“https://www.zhihu.com/api/v3 ...
- 花椒直播基于golang的中台技术实践
https://github.com/gopherchina/conference/blob/master/2019/2.7%20花椒直播基于golang的中台技术实践%20-%20周洋.pdf 花椒 ...
- MySQL 创建和删除数据表
创建MySQL数据表需要以下信息: 表名 表字段名 定义每个表字段 语法 以下为创建MySQL数据表的SQL通用语法: CREATE TABLE table_name (column_name col ...
- Intent Flags
Activity都是运行在任务栈里面,但如果要从广播接受者BordercastReceiver或者服务Service去启动一个Activity,必须为当前Activity创建一个新的任务栈才能正常显示 ...