题目链接:http://codeforces.com/contest/816/problem/C

题意:给出一个矩阵,问能否从都是0的情况下只将一整行+1或者一整列+1变形过来,如果可以输出需要步数最小的情况。不能输出-1

题解:就是一道模拟题,然后关于最小的只要考虑一种情况,就是当前行可以消除,也可以消除全部列的时候要考虑要删行还是删列,这个取决于n于m的大小

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int Max_Size = 5e2 + 10;
int a[Max_Size][Max_Size] , Minrow[Max_Size] , Mincol[Max_Size];
struct TnT {
string pos;
int num;
}T[Max_Size * Max_Size];
int main() {
int n , m;
cin >> n >> m;
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= m ; j++) {
cin >> a[i][j];
}
}
memset(Minrow , 0 , sizeof(Minrow));
memset(Mincol , 0 , sizeof(Mincol));
for(int i = 1 ; i <= n ; i++) {
int Min = Max_Size;
for(int j = 1 ; j <= m ; j++) {
Min = min(Min , a[i][j]);
}
Minrow[i] = Min;
}
for(int i = 1 ; i <= m ; i++) {
int Min = Max_Size;
for(int j = 1 ; j <= n ; j++) {
Min = min(Min , a[j][i]);
}
Mincol[i] = Min;
}
int ans = 0;
for(int i = 1 ; i <= n ; i++) {
if(m > n) {
for(int j = 1 ; j <= m ; j++) {
a[i][j] -= Minrow[i];
Mincol[j] = min(Mincol[j] , a[i][j]);
}
for(int j = 1 ; j <= Minrow[i] ; j++) {
T[ans].pos = "row";
T[ans].num = i;
ans++;
}
Minrow[i] = 0;
}
}
for(int i = 1 ; i <= m ; i++) {
if(m <= n) {
for(int j = 1 ; j <= n ; j++) {
a[j][i] -= Mincol[i];
Minrow[j] = min(Minrow[j] , a[j][i]);
}
for(int j = 1 ; j <= Mincol[i] ; j++) {
T[ans].pos = "col";
T[ans].num = i;
ans++;
}
Mincol[i] = 0;
}
}
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= m ; j++) {
a[i][j] -= Minrow[i];
Mincol[j] = min(Mincol[j] , a[i][j]);
}
for(int j = 1 ; j <= Minrow[i] ; j++) {
T[ans].pos = "row";
T[ans].num = i;
ans++;
}
Minrow[i] = 0;
}
for(int i = 1 ; i <= m ; i++) {
for(int j = 1 ; j <= n ; j++) {
a[j][i] -= Mincol[i];
Minrow[j] = min(Minrow[j] , a[j][i]);
}
for(int j = 1 ; j <= Mincol[i] ; j++) {
T[ans].pos = "col";
T[ans].num = i;
ans++;
}
Mincol[i] = 0;
}
int flag = 0;
for(int i = 1 ; i <= n ; i++) {
for(int j = 1 ; j <= m ; j++) {
if(a[i][j]) flag = 1;
}
}
if(!flag) {
cout << ans << endl;
for(int i = 0 ; i < ans ; i++) cout << T[i].pos << ' ' << T[i].num << endl;
}
else cout << -1 << endl;
return 0;
}

codeforces 816 C. Karen and Game(模拟+思维)的更多相关文章

  1. codeforces 816 B. Karen and Coffee(思维)

    题目链接:http://codeforces.com/contest/816/problem/B 题意:给出n个范围,q个查询问查询区间出现多少点在给出的n个范围中至少占了k次 题解:很显然的一道题目 ...

  2. codeforces 816 D. Karen and Test(逆元+思维+组合数)

    题目链接:http://codeforces.com/contest/816/problem/D 题解:显然一看到这题应该会想到是有什么规律的于是多写几项就会发现偶数列之间是有关系的. 满足a[i][ ...

  3. codeforces 816 E. Karen and Supermarket(树形dp)

    题目链接:http://codeforces.com/contest/816/problem/E 题意:有n件商品,每件有价格ci,优惠券di,对于i>=2,使用di的条件为:xi的优惠券需要被 ...

  4. Codeforces 916B Jamie and Binary Sequence ( 模拟 && 思维 )

    题意 : 给出一个数 n ,要求你用 k 个二的幂来组成这个数,要求输出这 k 个二的幂的指数,如果有多解情况则优先输出最大指数最小的那一个且要求按字典序输出,不存在则输出 No 分析 :  先来说一 ...

  5. 模拟+思维 HDOJ 5319 Painter

    题目传送门 /* 题意:刷墙,斜45度刷红色或蓝色,相交的成绿色,每次刷的是连续的一段,知道最终结果,问最少刷几次 模拟+思维:模拟能做,网上有更巧妙地做法,只要前一个不是一样的必然要刷一次,保证是最 ...

  6. Codeforces Round #546 (Div. 2) D 贪心 + 思维

    https://codeforces.com/contest/1136/problem/D 贪心 + 思维 题意 你面前有一个队列,加上你有n个人(n<=3e5),有m(m<=个交换法则, ...

  7. Codeforces 758D:Ability To Convert(思维+模拟)

    http://codeforces.com/problemset/problem/758/D 题意:给出一个进制数n,还有一个数k表示在n进制下的值,求将这个数转为十进制最小可以是多少. 思路:模拟着 ...

  8. Codeforces Round #469 (Div. 2)C. Zebras(思维+模拟)

    C. Zebras time limit per test memory limit per test 512 megabytes input standard input output standa ...

  9. Codeforces 950D A Leapfrog in the Array ( 思维 && 模拟 )

    题意 : 给出 N 表示有标号 1~N 的 N 个数,然后从下标 1 开始将这 N 个数每隔一位放置一个,直到 N 个数被安排完,现在有一个操作就是每次将数列中最右边的数向离其左边最近的空缺处填上,一 ...

随机推荐

  1. 极力推荐一个简单好用的C++JSON库

      极力推荐一个简单好用的C++JSON库CJsonObject,让使用json如使用C++原生的结构体那般方便,随心所欲.CJsonObject是个优秀的C++JSON库,也许会是你见过的最为简单易 ...

  2. byte数组和正数BigInteger之间的相互转换

    旧代码 public static void main(String[] args) { SecureRandom random = new SecureRandom(); byte[] key = ...

  3. JavaMail的简单使用(自测可以发邮件)

    在很多项目中我们都会遇到发送邮件的功能,发送邮件其实还是很实用的,正好今天做项目需要实现,现在来简单的整理一下发送邮件的实现. 建立邮件与服务器之间的会话 Properties props = new ...

  4. javaScript基础-04 对象

    一.对象的基本概念 对象是JS的基本数据类型,对象是一种复合值,它将很多值(原始值或者对象)聚合在一起,可通过名字访问这些值,对象也可看做是属性的无序集合,每个属性都是一个名/值对.对象不仅仅是字符串 ...

  5. exe、dos、bat等静默运行,后台运行,不弹窗的解决办法

    exe中 #pragma comment( linker, "/subsystem:windows /entry:mainCRTStartup" ) 1. WinExec(LPCS ...

  6. sql server数据库查询链接服务器

    服务器对象->链接服务器: 或者 select  * from sys.servers: 找到服务器对象名称 select  * from [服务器对象名称].[数据库名称].dbo.[表名]:

  7. Lasso估计论文学习笔记(一)

    最近课程作业让阅读了这篇经典的论文,写篇学习笔记. 主要是对论文前半部分Lasso思想的理解,后面实验以及参数估计部分没有怎么写,中间有错误希望能提醒一下,新手原谅一下. 1.整体思路 作者提出了一种 ...

  8. 第一次Git使用以及码云(Gitee)

    下载安装Git,官网下载地址https://git-scm.com/downloads,我用的是Win10版,下载好后一路默认安装,安装时会给你自动添加环境变量,完成后打开cmd,输入git --ve ...

  9. 《统计学习方法》极简笔记P2:感知机数学推导

    感知机模型 输入空间是$\chi\subseteq\mathbb{R}^n$,输出空间是$y={+1,-1}$ 感知机定义为:$f(x)=sign(wx+b)$ 感知机学习策略 输入空间任一点$x_0 ...

  10. Mina实现Socket通信完整过程

    目录 服务端 客户端 通信 自定义工厂编解码 解码器 编码器 总结 # 加入战队 微信公众号 title: Mina服务端客户端通信 date: 2018-09-30 09:00:30 tags: - ...