Advertisement
royalsflush

GCJ13 B-small-large

Apr 14th, 2013
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.37 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. #define BIG_GRASS 110
  6.  
  7. int t;
  8. int n,m;
  9. int pat[110][110];
  10. int gr[110][110];
  11.  
  12. pair<int,int> lookForBig() {
  13.     int big=0;
  14.     pair<int,int> ans=make_pair(-1,-1);
  15.  
  16.     for (int i=0; i<n; i++)
  17.         for (int j=0; j<m; j++)
  18.             if (gr[i][j]>pat[i][j] && big<pat[i][j])
  19.                 big=pat[i][j], ans=make_pair(i,j);
  20.     return ans;
  21. }
  22.  
  23. bool tryMown(int i, int j) {
  24.     int max_e=0;
  25.     if (i==-1 && j==-1)
  26.         return false;
  27.  
  28.     for (int k=0; k<n; k++)
  29.         max_e=max(max_e,pat[k][j]);
  30.    
  31.     if (max_e==pat[i][j]) {
  32.         for (int k=0; k<n; k++)
  33.             gr[k][j]=max_e;
  34.         return true;
  35.     }
  36.  
  37.     max_e=0;
  38.     for (int k=0; k<m; k++)
  39.         max_e=max(max_e,pat[i][k]);
  40.    
  41.     if (max_e>pat[i][j])
  42.         return false;
  43.  
  44.     for (int k=0; k<m; k++)
  45.         gr[i][k]=max_e;
  46.     return true;
  47. }
  48.  
  49.  
  50. bool reachPat() {
  51.     for (int i=0; i<n; i++)
  52.         for (int j=0; j<m; j++)
  53.             if (pat[i][j]!=gr[i][j])
  54.                 return false;
  55.     return true;
  56. }
  57.  
  58. int main() {
  59.     scanf("%d", &t);
  60.    
  61.     for (int casen=1; casen<=t; casen++) {
  62.         scanf("%d %d", &n,&m);
  63.        
  64.         for (int i=0; i<n; i++)
  65.             for (int j=0; j<m; j++)
  66.                 scanf("%d", &pat[i][j]);
  67.  
  68.         for (int i=0; i<n; i++)
  69.             for (int j=0; j<m; j++)
  70.                 gr[i][j]=BIG_GRASS;
  71.         pair<int,int> big;
  72.  
  73.         do {
  74.             big=lookForBig();
  75.         } while (tryMown(big.first, big.second));
  76.  
  77.         printf("Case #%d: %s\n", casen,reachPat()? "YES":"NO");
  78.     }
  79.     return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement