天天看點

CSU 1779: 錯誤的算法

#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;

#define MEM(a,b,start,end) for(int ii=start;ii<=end;ii++) a[ii]=b
const int maxn=500+10;

int ans[maxn][maxn],r[maxn],c[maxn],can[maxn][2];
int main()
{
  int n,m;
  int C=0;
  while(scanf("%d%d",&n,&m)==2){
    
    MEM(r,0,0,n);
    MEM(c,0,0,m);
    for(int i=0;i<n;i++){
      
      for(int j=0;j<m;j++){
        
          scanf("%d",&ans[i][j]);
          r[i]+=ans[i][j];
          c[j]+=ans[i][j];
        }
    }
    int M=0,N=0;
    int x,y;
    for(int i=0;i<n;i++){
      
      if(r[i]>M){
        
          M=r[i];
          x=i;
        }
    }   
    for(int i=0;i<m;i++){
      
      if(c[i]>N){
        
          N=c[i];
          y=i;
        }
    }
    int K=0;
    for(int i=0;i<n;i++) for(int j=0;j<m;j++) if((r[i]+c[j]-ans[i][j])>K) K=r[i]+c[j]-ans[i][j];
    int len=0;
    for(int i=0;i<n;i++) for(int j=0;j<m;j++)
    if((r[i]+c[j]-ans[i][j])==K){
      
        can[len][0]=i;
        can[len++][1]=j;
    }
    bool isok=false;
    for(int i=0;i<len;i++){
      
      if(can[i][0]==x && can[i][1]==y){
        
        isok=true;
          printf("Case %d: Weak\n",++C);
          break;
        }
    }
    if(!isok) printf("Case %d: Strong\n",++C);
  }
  return 0;
}