比赛 |
树立信心的模拟赛 |
评测结果 |
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;
}