[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 ...
随机推荐
- 001_UCOSIII引入原因
(一)在前年的学习中一直都是在裸机上跑程序的,根本没有用到操作系统,但是因为以前开发的东西很小,根本用不着,也没必要在操作系统上跑,所以就没有学习.在未来的几天中将进军UCOSIII.为什么选择UCO ...
- 检查errno
转自 http://blog.csdn.net/todd911/article/details/9132095 很多库函数,特别是那些与操作系统有关的,当执行失败时会通过一个名称为errno的外部变量 ...
- Linux之创建多个子进程
/*** fork_test.c ***/ #include<stdio.h> #include<stdlib.h> #include<unistd.h> int ...
- CentOS7根目录磁盘扩容(/dev/mapper/centos-root 空间不足)
今天在给测试环境搭建k8s系统时,发现master根目录磁盘空间不足,需要扩容,记录如下. # 查看根分区大小 [root@master ~]# df -h Filesystem Size Used ...
- include指令与jsp:include动作标识的区别
include指令: 文件包含指令include是jsp的另一条指令标识.通过该指令可以在一个jsp页面中包含另一个jsp页面.不过该指令是静态包含,也就是说被包含文件中所有内容会被原样包含到jsp页 ...
- Maven的几种新建项目方式
1. 使用原型创建Maven的java工程 (1) 选择 JDK 的版本,勾选“使用原型创建”,选中 maven-archetype-quickstart,下一步. (2) 填写公司名,填写项目名,修 ...
- Maven 3.6.1 下载及安装配置
Step1:Download You can download Maven3.6.1 from maven.apche.org , or from here. Step2:Unzip and add ...
- 模糊C均值聚类-FCM算法
FCM(fuzzy c-means) 模糊c均值聚类融合了模糊理论的精髓.相较于k-means的硬聚类,模糊c提供了更加灵活的聚类结果.因为大部分情况下,数据集中的对象不能划分成为明显分离的簇,指派一 ...
- C之交换数据案例
//值传递 void swap(int i,int j){ printf("交换后:\n "); int tmp; tmp = i; i = j; j = tmp; } //引用传 ...
- OpenNESS,开源的边缘网络服务平台
目录 文章目录 目录 参考文章 OpenNESS 的电梯间演讲 OpenNESS 与 ETSI MEC Edge Controller Software 的功能清单 Edge Platform Sof ...