P2356 弹珠游戏
P2356 弹珠游戏
分析
对于某个位置为0的所在行和所在列求和,并求最大值,本题的关键如何快速求是这n*n(最多10000)个值,在输入时预处理每行每列敌人的数量。
#include<iostream>
using namespace std;
const int Maxn=1010;
struct xy{
int x;
int y;
} XY[Maxn*10];//能击杀的敌人的位置
int L[Maxn],R[Maxn];
int main()
{
int n;
cin>>n;
int k=0;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
int a;
cin>>a;
if (a==0)
{
XY[k].x=i;
XY[k].y=j;
k++;
}
L[i]+=a;//统计每行的敌人数量
R[j]+=a;//统计每列的敌人数量
}
}
if(k==0)//没有能击杀的敌人的位置
{
cout<<"Bad Game"<<endl;
return 0;
}
int ans=0;
for (int i=0;i<k;i++)//枚举每个能击杀的敌人的位置的攻击人数并求最大值
{
ans=max(ans,L[XY[i].x]+R[XY[i].y]);
}
cout<<ans<<endl;
}
浙公网安备 33010602011771号