#419 (Div. 2) C 思维题
来源:互联网 发布:淘宝店首页怎么装修 编辑:程序博客网 时间:2024/06/03 16:39
思维题,多出样例,多看题意
题意:
有nxm的方格,每个方格有数字
。现在有两个操作。gi.j
- 对每一行的每一个数字都删除1,前提是每一个数字至少为1
- 对每一列的每一个数字都删除1,前提是每一个数字至少为1
经过很多上述的两种操作,如果方格里面的数字全都可以变为0,则输出最少的操作次数和操作方式
操作方式有很多种,输出一种就行。如果不能实现输出-1
思路:
这里有个误区,最开始在思考怎么操作的时候会觉得先横着或者先竖着都一样,其实对于n!= m的情况有时候是不行的,例如:
如果按照先行操作的时候只需要 3 + 3 + 2 +1 = 9次,但是如果按照列操作的时候就是5+4+3 = 12次。所以很明显需要先比较n和m的大小,谁大先算谁。554433
#include <iostream>#include <cstdio>#include <cstring>using namespace std;const int maxn = 105;const int INF = 0x3f3f3f3f;int n,m,times;int a[maxn][maxn];int r[maxn],c[maxn];void row(){ for(int i = 1;i <= n; i++) { int Min = INF; for(int j = 1;j <= m; j++) { Min = min(Min,a[i][j]); } if(Min > 0 && Min != INF) { r[i] = Min; times += Min; for(int j = 1;j <= m; j++) a[i][j] -= Min; } }}void col(){ for(int j = 1;j <= m; j++) { int Min = INF; for(int i = 1;i <= n; i++) { Min = min(Min,a[i][j]); } if(Min > 0 && Min != INF) { c[j] = Min; times += Min; for(int i = 1;i <= n; i++) a[i][j] -= Min; } }}int main(int argc, char const *argv[]){ //freopen("in.txt","r",stdin); times = 0; scanf("%d%d",&n,&m); for(int i = 1;i <= n; i++) { for(int j = 1;j <= m; j++) { scanf("%d",&a[i][j]); } } if(n < m) row(),col(); else col(),row(); int flag = false; for(int i = 1;i <= n; i++) { if(flag) break; for(int j = 1;j <= m; j++) if(a[i][j]) flag = true; } if(flag) printf("-1\n"); else { printf("%d\n",times); for(int i = 1;i <= n; i++) { while(r[i]) { printf("row %d\n",i); r[i] --; } } for(int i = 1;i <= m; i++) { while(c[i]) { printf("col %d\n",i); c[i] --; } } } return 0;}
阅读全文
0 0
- #419 (Div. 2) C 思维题
- Codeforces Round #419 (Div. 2) C.Karen and Game 思维
- Codeforces Round #261 (Div. 2)C题(思维题)
- Codeforces Round #418 (Div. 2) C 预处理/思维题
- #442 Div.2 AB &C. Slava and tanks 思维题
- Codeforces Round #353 (Div. 2) C 思维
- Codeforces Round #419 (Div. 2)-贪心&思维-C. Karen and Game
- Codeforces Round #335 (Div. 2) (C 思维题(递推,贪心))
- Codeforces Round #353 (Div. 2) C. Money Transfers (思维题)
- Codeforces Round #350 (Div. 2) C. Cinema __ sortings, 思维题,many data
- Codeforces Round #164 (Div. 2) C. Beautiful Sets of Points【思维题】
- Codeforces #380(Div.2)C.Road to Cinema【思维+二分查找】好题~
- Codeforces#381(Div. 2) C. Alyona and mex【思维】好题~
- Codeforces Round #424 (Div. 2) C. Jury Marks (思维题)
- 好题-Round #426 (Div. 2)C-二分&&思维||质因数分解-The Meaningless Game
- Codeforces Beta Round #32 (Div. 2) C (math+思维)
- Codeforces Round #246 (Div. 2)(C)数学,思维
- Codeforces Round #345 (Div. 2)(C)排列组合,思维
- mysql主从集群
- Linux 下JDK的安装配置
- 苹果机之静态分析 | 看一看别人的代码
- Bluetooth MESH探究 --- (5) BLE core spec之链路层基本流程
- 解决Tomcat报错:SEVERE: Error listenerStart
- #419 (Div. 2) C 思维题
- Java常用算法
- 1006. 换个格式输出整数 (15)
- <Linux>解析以及实现epoll服务器
- React-Native中二维码扫描使用
- 数据结构
- JS中如何用EL表达式
- 扩展欧几里德算法
- LeetCode 461. Hamming Distance