题目链接: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. 用 PYQT5 和 QT Dseingner 写的串口助手

    最近公司做项目需要写串口助手,于是从网上找教程着手写了一下,基本的功能可以实现了,但是想要一个表盘的功能一直没有找到教程,有些遗憾.大神们会的话给指导指导  谢谢啦 ! 下边有源码的连接,欢迎大家下载 ...

  2. JSON合并,并按时间排序

    mergeJson: function (json1, json2) { var json = Object.assign([], json1, json2); return json.sort(fu ...

  3. [Pulsar系列] 10分钟学会Pulsar消息系统概念

    Apache Pulsar Pulsar是一个支持多租户的.高性能的服务与服务之间消息通讯的解决方案,最初由雅虎开发,现在由Apache软件基金会管理. Pulsar的主要特性如下: Pulsar实例 ...

  4. 第四章 文件的基本管理和XFS文件系统备份恢复 随堂笔记

    第四章 文件的基本管理和XFS文件系统备份恢复 本节所讲内容: 4.1 Linux系统目录结构和相对/绝对路径. 4.2 创建/复制/删除文件,rm -rf / 意外事故 4.3 查看文件内容的命令 ...

  5. SpringBoot:如何优雅地处理全局异常?

    之前用springboot的时候,只知道捕获异常使用try{}catch,一个接口一个try{}catch,这也是大多数开发人员异常处理的常用方式,虽然屡试不爽,但会造成一个问题,就是一个Contro ...

  6. 在Linux和Windows系统中输出目录结构

    前言 一直以来就想在写文章时,能以文本形式(而不是截图)附上项目的目录结构,今天终于知道怎么操作了,在这分享一下. Linux 首先说下Linux上输出目录结构的方法. yum安装tree 需要支持t ...

  7. cs231n官方note笔记

    本文记录官方note中比较新颖和有价值的观点(从反向传播开始) 一 反向传播 1 “反向传播是一个优美的局部过程.在整个计算线路图中,每个门单元都会得到一些输入并立即计算两个东西:1. 这个门的输出值 ...

  8. 详解慢查询日志的相关设置及mysqldumpslow工具

    概述 mysql慢查询日志是mysql提供的一种日志记录,它是用来记录在mysql中相应时间超过阈值的语句,就是指运行时间超过long_query_time值的sql,会被记录在慢查询日志中.long ...

  9. 三角函数与JavaScript

     1. 三角函数 sin&(求对边与斜边的比值) cos&(邻边与斜边的比值) tan&(对边与邻边的比值) 2.JavaScript的函数的使用 Math.sin() Mat ...

  10. keras 学习笔记:从头开始构建网络处理 mnist

    全文参考 < 基于 python 的深度学习实战> import numpy as np from keras.datasets import mnist from keras.model ...