codeforces815aKarenAndGames解题报告
来源:互联网 发布:npm 淘宝镜像安装教程 编辑:程序博客网 时间:2024/06/07 19:51
【题目描述】
在她上学的路上,她沉迷于一款益智游戏无法自拔。
游戏是这样的:在每一关,你都有一个n行m列的网格。每个单元最初为数字0。每一步你可以选择一行或一列,并将该行或列中的所有单元格添加1。为了通关,你需要在所有的移动之后使第i行第j列的数字为g[i][j]。凯伦想知道一种使用最少步数通关的方法。
【输入格式】
第一行输入包含两个整数,分别为n和m(1≤n,m≤100),表示网格中的行数和列数。
接下来的n行每行都包含m个整数。第i行的第j个整数表示g[i][j](0≤g[i][j]≤500)。
【输出格式】
如果无法通关,输出-1。
否则,第一行输出一个整数k表示最小步数
接下来k行包含以下两项,用来描述一步操作
row x,(1<=x<=n)表示选第x行。
col x,(1<=x<=m)表示选第x列。
如果有多个答案,输出任意一个
【样例输入1】
3 5
2 2 2 3 2
0 0 0 1 0
1 1 1 2 1
【样例输出1】
4
row 1
row 1
row 3
col 4
【样例输入2】
3 3
0 0 0
0 1 0
0 0 0
【样例输出2】
-1
【样例输入3】
3 3
1 1 1
1 1 1
1 1 1
【样例输出3】
3
row 1
row 2
row 3
题解:
直接模拟。。先取行数列数中较小的一个 可以减少取的次数
代码:
#include <iostream>#include <cstdio>using namespace std;int A[110][110];int ans[110],Ans[110];int main(){freopen("games.in","r",stdin);freopen("games.out","w",stdout);int n,m;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){for(int i=1;i<=n;i++){int minn=0x7fffffff;for(int j=1;j<=m;j++)minn=min(minn,A[i][j]);for(int j=1;j<=m;j++)A[i][j]-=minn;ans[i]=minn;}for(int i=1;i<=m;i++){int minn=0x7fffffff;for(int j=1;j<=n;j++)minn=min(minn,A[j][i]);for(int j=1;j<=n;j++)A[j][i]-=minn;Ans[i]=minn;}}else {for(int i=1;i<=m;i++){int minn=0x7fffffff;for(int j=1;j<=n;j++)minn=min(minn,A[j][i]);for(int j=1;j<=n;j++)A[j][i]-=minn;Ans[i]=minn;}for(int i=1;i<=n;i++){int minn=0x7fffffff;for(int j=1;j<=m;j++)minn=min(minn,A[i][j]);for(int j=1;j<=m;j++)A[i][j]-=minn;ans[i]=minn;}}for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(A[i][j]){puts("-1");return 0;}int dl=0;for(int i=1;i<=n;i++)dl+=ans[i];for(int i=1;i<=m;i++)dl+=Ans[i];printf("%d\n",dl);if(n<=m){for(int i=1;i<=n;i++)for(int j=1;j<=ans[i];j++)printf("row %d\n",i);for(int i=1;i<=m;i++)for(int j=1;j<=Ans[i];j++)printf("col %d\n",i);}else {for(int i=1;i<=m;i++)for(int j=1;j<=Ans[i];j++)printf("col %d\n",i);for(int i=1;i<=n;i++)for(int j=1;j<=ans[i];j++)printf("row %d\n",i);}return 0;}
阅读全文
0 0
- codeforces815aKarenAndGames解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- 解题报告
- Antiprime解题报告
- expr解题报告
- 华容道解题报告
- tju解题报告
- zju1062/pku1095解题报告
- UsacoGate解题报告 --- 序曲
- ZJU 2060 解题报告
- ZJU 1331 解题报告
- ZJU 1115 解题报告
- ZJU1057解题报告
- 安装mysql
- 【hpu oj 1019 985的买饮料难题 [数学、DP]】
- POJ2502 subway(spfa)
- <8>——String to Integer (atoi)
- CodeForces 118 A.String Task(水~)
- codeforces815aKarenAndGames解题报告
- C++的Lambda表达式
- 详解C++11的Lambda表达式
- Intellij Idea 创建Web项目入门(非Maven项目)
- cmd MySQL登录
- scala之映射和元祖
- vim常用命令
- 十字架(百度2017秋招真题)
- php预定义常量运用