• #419(div2) C. Karen and Game


    题意:给出一个n*m的矩阵,然后我们可以每一行-1,每一列-1,问是否可以全部变成0

    思路:最开始的时候马上就想到了无论怎样,他每一行该减去的时候无论先后都要减去,那么我每一行取一个最小值减去,然后每一列取最小值减去,然后判断是否全部为0,然后学弟给了我一组数据,3 2 2 2 1 1 2 2,题要求最少步骤,那么我们那样就不可以,所以得判断下n和m的大小,n大先做列,那样就减去的数字更多了,m大反之亦然。(手速狗靠这涨了一波大分,o(* ̄▽ ̄*)ブ)

      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 
      4 int a[105][105];
      5 int hang[105],lie[105];
      6 int n,m;
      7 struct node{
      8     int x,y;
      9 }e[200002];
     10 
     11 int main(){
     12     memset(hang,127,sizeof(hang));
     13     memset(lie,127,sizeof(lie));
     14     scanf("%d%d",&n,&m);
     15     int l=0;
     16     for(int i=1;i<=n;i++)
     17         for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);
     18     if(n<=m){
     19 
     20         for(int i=1;i<=n;i++){
     21         for(int j=1;j<=m;j++){
     22         hang[i]=min(hang[i],a[i][j]);
     23         }
     24     }
     25     for(int i=1;i<=n;i++){
     26          if(hang[i]>0){
     27             for(int j=1;j<=m;j++)
     28             {
     29                 a[i][j]-=hang[i];
     30 
     31             }
     32             while(hang[i]--){
     33                 e[l].x=1;e[l++].y=i;
     34             }
     35 
     36          }
     37     }
     38     for(int i=1;i<=m;i++){
     39         for(int j=1;j<=n;j++){
     40             lie[i]=min(lie[i],a[j][i]);
     41         }
     42     }
     43     for(int i=1;i<=m;i++){
     44         if(lie[i]>0){
     45             for(int j=1;j<=n;j++)
     46             {
     47                 a[j][i]-=lie[i];
     48 
     49             }
     50             while(lie[i]--){
     51                 e[l].x=2;e[l++].y=i;
     52             }
     53 
     54         }
     55     }
     56     int sum=0;
     57     for(int i=1;i<=n;i++)
     58         for(int j=1;j<=m;j++)
     59         if(a[i][j]==0) sum++;
     60     if(sum!=n*m){
     61         printf("-1
    ");
     62     }
     63     else {
     64             printf("%d
    ",l);
     65         for(int i=0;i<l;i++){
     66             if(e[i].x==1) printf("row ");
     67             else printf("col ");
     68             printf("%d
    ",e[i].y);
     69         }
     70       }
     71     }
     72     else {
     73 
     74             for(int i=1;i<=m;i++){
     75         for(int j=1;j<=n;j++){
     76             lie[i]=min(lie[i],a[j][i]);
     77         }
     78     }
     79     for(int i=1;i<=m;i++){
     80         if(lie[i]>0){
     81             for(int j=1;j<=n;j++)
     82             {
     83                 a[j][i]-=lie[i];
     84 
     85             }
     86             while(lie[i]--){
     87                 e[l].x=2;e[l++].y=i;
     88             }
     89 
     90         }
     91     }
     92          for(int i=1;i<=n;i++){
     93         for(int j=1;j<=m;j++){
     94         hang[i]=min(hang[i],a[i][j]);
     95         }
     96      }
     97     for(int i=1;i<=n;i++){
     98          if(hang[i]>0){
     99             for(int j=1;j<=m;j++)
    100             {
    101                 a[i][j]-=hang[i];
    102 
    103             }
    104             while(hang[i]--){
    105                 e[l].x=1;e[l++].y=i;
    106             }
    107 
    108          }
    109     }
    110 
    111     int sum=0;
    112     for(int i=1;i<=n;i++)
    113         for(int j=1;j<=m;j++)
    114         if(a[i][j]==0) sum++;
    115     if(sum!=n*m){
    116         printf("-1
    ");
    117     }
    118     else {
    119             printf("%d
    ",l);
    120         for(int i=0;i<l;i++){
    121             if(e[i].x==1) printf("row ");
    122             else printf("col ");
    123             printf("%d
    ",e[i].y);
    124         }
    125       }
    126     }
    127 }
  • 相关阅读:
    我所理解的readonly和const
    代码中的良好习惯从点滴做起
    常用正则表达式收集
    优化网站加载速度的14个技巧
    关于easyUI的模态对话框
    关于jq ajax封装以及ajax上传Webapi
    Linux完全卸载Oracle的操作步骤
    Linux下安装oracle的一般步骤
    CentOS Linux上安装Oracle11g笔记
    Oracle中建库时报Exception in thread main
  • 原文地址:https://www.cnblogs.com/hhxj/p/7044158.html
Copyright © 2020-2023  润新知