zoukankan      html  css  js  c++  java
  • Codeforces Round #419 (Div. 2)C. Karen and Game

    C. Karen and Game

    给定n行m列数字,每次可以让一行或一列都减一,求出让全部数字全为0的最小的次数,没有则输出-1;

    比赛时没有考虑,n和m的大小问题,被hack了。5555555555555555555555555555

    好的方法没有想到,只有一个死方法了。

      1 #include <iostream>
      2 #include <stdio.h>
      3 #define long long ll
      4 using namespace std;
      5 int a[110][110], n, m,b[110][110];
      6 bool check(){
      7     for(int i = 1; i <= n; i ++){
      8         for(int j = 1; j <= m; j ++){
      9             if(a[i][j] != 0){
     10                 return true;
     11             }
     12         }
     13     }
     14     return false;
     15 }
     16 
     17 int main(){
     18     cin >> n >> m;
     19     for(int i = 1; i <= n; i ++){
     20         for(int j = 1; j <= m; j ++){
     21 //            scanf("%d",&a[i][j]);
     22             cin >> a[i][j];
     23             b[i][j] = a[i][j];
     24         }
     25     }
     26     int sum, flag = 1, i = 1,j = 1, ans = 0;
     27     if(n <= m){
     28         while(i <= n){
     29             sum = 0;
     30             flag = 1;
     31             for(int k = 1; k <= m; k ++){
     32                 if(!a[i][k]){
     33                     flag = 0;
     34                     break;
     35                 }
     36             }
     37             if(flag){
     38                 ans++;
     39                 for(int k = 1; k <= m; k ++) a[i][k] -= 1;
     40             }else i++;
     41         }
     42         while(j <= m){
     43             sum = 0;
     44             flag = 1;
     45             for(int k = 1; k <= n; k ++){
     46                 if(!a[k][j]){
     47                     flag = 0;
     48                     break;
     49                 }
     50             }
     51             if(flag){
     52                 ans ++;
     53                 for(int k = 1; k <= n; k ++) a[k][j] -= 1;
     54             }else j++;
     55         }
     56     }else{
     57         while(j <= m){
     58             sum = 0;
     59             flag = 1;
     60             for(int k = 1; k <= n; k ++){
     61                 if(!a[k][j]){
     62                     flag = 0;
     63                     break;
     64                 }
     65             }
     66             if(flag){
     67                 ans ++;
     68                 for(int k = 1; k <= n; k ++) a[k][j] -= 1;
     69             }else j++;
     70         }
     71         while(i <= n){
     72             sum = 0;
     73             flag = 1;
     74             for(int k = 1; k <= m; k ++){
     75                 if(!a[i][k]){
     76                     flag = 0;
     77                     break;
     78                 }
     79             }
     80             if(flag){
     81                 ans++;
     82                 for(int k = 1; k <= m; k ++) a[i][k] -= 1;
     83             }else i++;
     84         }
     85     }
     86     if(check()){
     87         cout << -1 << endl;
     88         return 0;
     89     }
     90     cout << ans << endl;
     91     i = j = 1;
     92     if(n <= m){
     93         while(i <= n){
     94             sum = 0;
     95             flag = 1;
     96             for(int k = 1; k <= m; k ++){
     97                 if(!b[i][k]){
     98                     flag = 0;
     99                     break;
    100                 }
    101             }
    102             if(flag){
    103                 cout << "row " << i << endl;
    104                 for(int k = 1; k <= m; k ++) b[i][k] -= 1;
    105             }else i++;
    106         }
    107         while(j <= m){
    108             sum = 0;
    109             flag = 1;
    110             for(int k = 1; k <= n; k ++){
    111                 if(!b[k][j]){
    112                     flag = 0;
    113                     break;
    114                 }
    115             }
    116             if(flag){
    117                 cout << "col " << j << endl;
    118                 for(int k = 1; k <= n; k ++) b[k][j] -= 1;
    119             }else j++;
    120         }
    121     }else{
    122         while(j <= m){
    123             sum = 0;
    124             flag = 1;
    125             for(int k = 1; k <= n; k ++){
    126                 if(!b[k][j]){
    127                     flag = 0;
    128                     break;
    129                 }
    130             }
    131             if(flag){
    132                 cout << "col " << j << endl;
    133                 for(int k = 1; k <= n; k ++) b[k][j] -= 1;
    134             }else j++;
    135         }
    136         while(i <= n){
    137             sum = 0;
    138             flag = 1;
    139             for(int k = 1; k <= m; k ++){
    140                 if(!b[i][k]){
    141                     flag = 0;
    142                     break;
    143                 }
    144             }
    145             if(flag){
    146                 cout << "row " << i << endl;
    147                 for(int k = 1; k <= m; k ++) b[i][k] -= 1;
    148             }else i++;
    149         }
    150     }
    151     return 0;
    152 }
    View Code
  • 相关阅读:
    nyoj 164&amp;&amp;poj2084 Game of Connections 【卡特兰】
    1、Cocos2dx 3.0游戏开发找小三之前言篇
    hibernate一级缓存,二级缓存和查询缓存
    WCF服务端调用client.
    优化中的subgradient方法
    Xsolla和Crytek合作,对游戏战争前线推出全新支付方式
    CNZZ站点流量统计原理简析
    分数加减法
    【jvm】windows下查看java进程下多线程的相关信息
    【面试 docker+k8s+jenkins】【第二十篇】docker+k8s+jenkins相关面试
  • 原文地址:https://www.cnblogs.com/xingkongyihao/p/7043594.html
Copyright © 2011-2022 走看看