| 比赛 | 
    树立信心的模拟赛 | 
    评测结果 | 
    AAAAAAAAAA | 
    | 题目名称 | 
    凯伦和游戏 | 
    最终得分 | 
    100 | 
    | 用户昵称 | 
    Shirry | 
    运行时间 | 
    0.015 s  | 
    | 代码语言 | 
    C++ | 
    内存使用 | 
    1.29 MiB  | 
    | 提交时间 | 
    2017-09-01 20:36:15 | 
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
#define inf 1e9
using namespace std;
const int maxn=510;
bool flag=true;
int m,n,ans=0,row[maxn],col[maxn],s[maxn][maxn],g[maxn],h[maxn];//g shi hang h shi lie
void FindR(){
	for(int i=1;i<=n;i++){
		g[i]=inf;
		int j=1;
		while(j<=m){
			g[i]=min(g[i],s[i][j]);
			j++;
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++)s[i][j]-=g[i];
		row[i]+=g[i],ans+=g[i];
	}
}
void FindC(){
	for(int i=1;i<=m;i++){
		h[i]=inf;
		int j=1;
		while(j<=n){
			h[i]=min(h[i],s[j][i]);
			j++;
		}
	}
	for(int j=1;j<=m;j++){
		for(int i=1;i<=n;i++)s[i][j]-=h[j];
		col[j]+=h[j],ans+=h[j];
	}
}
void Cal(){
	if(n<=m)FindR(),FindC();
	else FindC(),FindR();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			if(s[i][j])flag=0;
}
int main(){
	freopen("games.in","r",stdin);
	freopen("games.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)scanf("%d",&s[i][j]);
	Cal();
	if(flag==true){
		printf("%d\n",ans);
		for(int i=1;i<=n;i++){
			if(row[i]){
				for(int j=1;j<=row[i];j++)printf("row %d\n",i);
			}
		}
		for(int j=1;j<=m;j++){
			if(col[j]){
				for(int i=1;i<=col[j];i++)printf("col %d\n",j);
			}
		}
	}
	else printf("-1\n");
	return 0;
}