permui / ZJUCKC-C-Learning-Assistence

浙江大学竺可桢学院C语言程序设计辅学计划公共仓库。
6 stars 6 forks source link

[practice]2-张康杰-排座位-洛谷 #5

Open zkj-turing opened 4 years ago

zkj-turing commented 4 years ago

排座位

题目链接

样例可以通过,但是测试点过不了,请学长(姐)帮忙改一下,谢谢

#include<stdio.h>
#include<string.h>
int main()
{
    int m,n,k,l,d;
    scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
    int i;
    int a[1002]={0};//行 
    int b[1002]={0};//列 
    for(i=0;i<d;i++)
    {
        int x1,y1,x2,y2;
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        if(x1==x2)
        {
            if(y1<y2) b[y1]++;
            else b[y2]++;
        }
        if(y1==y2)
        {
            if(x1<x2) a[x1]++;
            else a[x2]++;
        }
    }
    for(i=1;i<=k;i++)
    {
        int max=-1,loc;
        int j;
        for(j=1;j<=m;j++)
        {
            if(a[j]>max)
            {
                max=a[j];
                loc=j;
            }
        }
        a[loc]=-1;
        printf("%d ",loc);
    }printf("\n");
    for(i=1;i<=l;i++)
    {
        int max=-1,loc;
        int j;
        for(j=1;j<=n;j++)
        {

            if(b[j]>max)
            {
                max=b[j];
                loc=j;
            }
        }

        b[loc]=-1;
        printf("%d ",loc);
    }   
 } 
changpinghou commented 4 years ago

我觉得这个问题主要在,你没有升序输出吧

changpinghou commented 4 years ago

还有按行/列找最大的时候最好不要小于等于?

changpinghou commented 4 years ago

这个是ac的代码

#include<stdio.h>
#include<string.h>
int main()
{
    int m,n,k,l,d;
    scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
    int i;
    int a[1002]={0};//行 
    int b[1002]={0};//列 
    int c1[1002],c2[1002];
    for(i=0;i<d;i++)
    {
        int x1,y1,x2,y2;
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        if(x1==x2)
        {
            if(y1<y2) b[y1]++;
            else b[y2]++;
        }
        if(y1==y2)
        {
            if(x1<x2) a[x1]++;
            else a[x2]++;
        }
    }
    for(i=1;i<=k;i++)
    {
        int max=-1,loc;
        int j;
        for(j=1;j<m;j++)
        {
            if(a[j]>max)
            {
                max=a[j];
                loc=j;
            }
        }
        a[loc]=-1;
        c1[loc]=1;
    }
    for(i=1;i<m;i++){
    if(c1[i]) printf("%d ",i);}
    printf("\n");
    for(i=1;i<=l;i++)
    {
        int max=-1,loc;
        int j;
        for(j=1;j<n;j++)
        {

            if(b[j]>max)
            {
                max=b[j];
                loc=j;
            }
        }

        b[loc]=-1;
        c2[loc]=1;
    }   
    for(i=1;i<n;i++){
    if (c2[i]) printf("%d ",i);  }
 }