题目:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1779
思路:错误的算法找位置没什么好说的,然而正确的算法不需要找位置了,暴力找下最大值就好了,但是我却以为找正确位置也行,然而正确的位置可能有多个。
举个栗子:n = 5,m = 5,错误的找到(4,4 ),正确的有(2,2)和(4,4),如果取最小的正确位置的话结果(4,4 ) != (2,2)了,strong?当然是weak
ps:最近思维过于僵化,写水题一定要稳啊
#include <bits/stdc++.h>
using namespace std;
const int N = 505;
int a[N][N],row[N],col[N];
int main()
{
int n,m,cnt = 0;
while(~scanf("%d%d",&n,&m))
{
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m;j++)
scanf("%d",&a[i][j]);
printf("Case %d: ",++cnt);
int mr = 1,mc = 1,maxr = 0,maxc = 0;
int maxn = 0,m1 = 1,m2 = 1;
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= m;j++)
{
row[i] += a[i][j];
}
//printf("%d\n",row[i]);
if(maxr < row[i])
{
maxr = row[i];
mr = i;
}
}
for(int j = 1;j <= m;j++)
{
for(int i = 1;i <= n;i++)
{
col[j] += a[i][j];
}
//printf("%d\n",col[j]);
if(maxc < col[j])
{
maxc = col[j];
mc = j;
}
}
//printf("\n%d %d\n",mr,mc);
for(int i = 1;i <= n;i++)
{
for(int j = 1;j <= m;j++)
{
if(maxn < row[i]+col[j]-a[i][j])
{
maxn = row[i]+col[j]-a[i][j];
m1 = i;m2 = j;
}
}
}
//printf("%d %d\n",m1,m2);
if(maxr + maxc - a[mr][mc] == maxn)//if(m1 == mr && m2 == mc)
printf("Weak\n");
else
printf("Strong\n");
}
}