P1056 [NOIP2008 普及组] 排座椅

发布时间 2023-07-25 10:34:52作者: 甜甜公主

1.变量 maxng 在 for 循环内声明和初始化,是因为它们用于追踪每次循环中的最大值及其对应的索引。

如果将 maxng 的声明移到 for 循环外部,它们将保留上一次迭代的值,并且比较语句 if(a[j]>maxn)if(b[j]>maxn) 将无法正常工作。在每次迭代中将它们初始化为 -1 的目的是为了找到当前迭代中的最大值。

通过在 for 循环内声明和初始化 maxng,保证了它们在每次迭代时都有新的值,从而正确确定最大值及其索引。

 
#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;
}