1 条题解

  • 0
    @ 2025-2-14 21:11:41

    C :

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct Map
    {
        int id,value;
    }map;
    int cmp(const void *a,const void *b)
    {
        return ((map*)a)->value<((map*)b)->value;
    }
    int cmp2(const void *a,const void *b)
    {
        return ((map*)b)->id<((map*)a)->id;
    }
    int main()
    {
        int x1,y1,x2,y2,i,j,k,m,n,l,d,max;
        map row[1001],col[1001];
        scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
        memset(row,0,sizeof(int)*(n+1));
        memset(col,0,sizeof(int)*(m+1));
        for (i=1;i<=d;i++)
        {
            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
            if (x1==x2)
            {
                col[y1<y2?y1:y2].value++;
                col[y1<y2?y1:y2].id=y1<y2?y1:y2;
            }
            if (y1==y2)
            {
                row[x1<x2?x1:x2].value++;
                row[x1<x2?x1:x2].id=x1<x2?x1:x2;
            }
        }
        qsort(row+1,m,sizeof(map),cmp);
        qsort(row+1,k,sizeof(map),cmp2);
        qsort(col+1,n,sizeof(map),cmp);
        qsort(col+1,l,sizeof(map),cmp2);
        for (i=1;i<=k;i++)
        {
            printf("%d",row[i].id);
            if (i<k) printf(" ");
        }
        printf("\n");
        for (i=1;i<=l;i++)
        {
            printf("%d",col[i].id);
            if (i<l) printf(" ");
        }
        return 0;
    }
    

    C++ :

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int M,N,k,l,D,a1,a2,b1,b2;
    bool K[1010],L[1010];
    int A[1010],B[1010];
    int A1[1010],B1[1010];
    int I=0,J=0;
    void in();
    void out1();
    void out2();
    int main()
    {
    	in();
    	int i=0;
    	while(1)
    	{
    		if(i==D)break;
    		i++;
    		cin>>a1>>b1>>a2>>b2;
    		if(b1==b2)
    		{
    			if(a1>a2)a1=a2;
    			K[a1]=true;
    			A[a1]++;
    			continue;
    		}
    		if(a1==a2)
    		{
    			if(b1>b2)b1=b2;
    			L[b1]=true;
    			B[b1]++;
    			continue;
    		}
    	}
    	out1();
    	out2();
    	return 0;
    }
    void in()
    {
    	cin>>M>>N>>k>>l>>D;
    	memset(K,0,sizeof(K));
    	memset(L,0,sizeof(L));
    	memset(A,0,sizeof(A));
    	memset(B,0,sizeof(B));
    	memset(A1,0,sizeof(A));
    	memset(B1,0,sizeof(B));
    }
    void out1()
    {
    	for(int i=1;i<=k;i++)
    	{
    		int max=0,c;
    		for(int j=1;j<=M;j++)
    		{
    			if(K[j]==true&&A[j]>max)
    			{
    				max=A[j];
    				c=j;
    			}
    		}
    		A[c]=0;
    		A1[I]=c;
    		I++;
    	}
    	sort(A1,A1+k);
    	for(int i=0;i<k-1;i++)
    	cout<<A1[i]<<' ';
    	cout<<A1[k-1]<<endl;
    }
    void out2()
    {
    	for(int i=1;i<=l;i++)
    	{
    		int max=0,c;
    		for(int j=1;j<=N;j++)
    		{
    			if(L[j]==true&&B[j]>max)
    			{
    				max=B[j];
    				c=j;
    			}
    		}
    		B[c]=0;
    		B1[J]=c;
    		J++;
    	}
    	sort(B1,B1+l);
    	for(int i=0;i<l-1;i++)
    	cout<<B1[i]<<' ';
    	cout<<B1[l-1]<<endl;
    }
    

    Pascal :

    var m,n,k,l,d,q,w,e,r,i,j,max,u,f:longint;
        a,b,uu:array[1..1000]of longint;
    procedure sw(var i,j:longint);
    var p:longint;
    begin
     p:=uu[i];uu[i]:=uu[j];uu[j]:=p;
     inc(i);dec(j);
    end;
    procedure qsort(i,j:longint);
    var l,r,mid:longint;
    begin
     l:=i;r:=j;mid:=uu[(l+r) div 2];
     repeat
      while uu[i]<mid do inc(i);
      while uu[j]>mid do dec(j);
      if i<=j then sw(i,j);
     until i>j;
     if i<r then qsort(i,r);
     if l<j then qsort(l,j);
    end;
    begin
     readln(m,n,k,l,d);
     for i:=1 to d do
      begin
       readln(q,w,e,r);
       if q=e then if w<r then inc(a[w]) else inc(a[r]);
       if w=r then if q<e then inc(b[q]) else inc(b[e]);
      end;
     for i:=1 to k do
      begin max:=0;
       for j:=1 to m-1 do
        if b[j]>max then
         begin max:=b[j];f:=j;end;
       inc(u);uu[u]:=f;b[f]:=0;
      end;
     qsort(1,u);
     for i:=1 to u-1 do write(uu[i],' ');
     writeln(uu[u]);
     u:=0;
     for i:=1 to l do
      begin max:=0;
       for j:=1 to n-1 do
        if a[j]>max then begin max:=a[j];f:=j; end;
        inc(u);uu[u]:=f;a[f]:=0;
      end;
     qsort(1,u);
     for i:=1 to u-1 do write(uu[i],' ');
     writeln(uu[u]);
    end.
    
    • 1

    信息

    ID
    696
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者