1.变量 maxn
和 g
在 for 循环内声明和初始化,是因为它们用于追踪每次循环中的最大值及其对应的索引。
如果将 maxn
和 g
的声明移到 for 循环外部,它们将保留上一次迭代的值,并且比较语句 if(a[j]>maxn)
或 if(b[j]>maxn)
将无法正常工作。在每次迭代中将它们初始化为 -1
的目的是为了找到当前迭代中的最大值。
通过在 for 循环内声明和初始化 maxn
和 g
,保证了它们在每次迭代时都有新的值,从而正确确定最大值及其索引。
#include<bits/stdc++.h>
using namespace std;
int m,n,k,l,d;
int x,y,p,q;
int a[1005],b[1005];
int c[1005],o[1005];
int main()
{
cin>>m>>n>>k>>l>>d;
for(int i=1;i<=d;i++)
{
cin>>x>>y>>p>>q;
if(x==p)b[min(y,q)]++;
else if(y==q)a[min(x,p)]++;
}
for(int i=1;i<=k;i++)
{
int maxn=-1;
int g;
for(int j=1;j<=m;j++)
if(a[j]>maxn)
{
maxn=a[j];
g=j;
}
a[g]=0;
c[g]++;
}
for(int i=1;i<=l;i++)
{
int maxn=-1;
int g;
for(int j=1;j<=n;j++)
if(b[j]>maxn)
{
maxn=b[j];
g=j;
}
b[g]=0;
o[g]++;
}
for(int i=0;i<1005;i++)
{
if(c[i])
printf("%d ",i);
}
printf("\n");
for(int i=1;i<=1005;i++)
{
if(o[i])
printf("%d ",i);
}
return 0;
}