1 条题解

  • 0
    @ 2025-9-10 0:06:29

    C++ :

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    struct hang_nt{
        int num;//行号 
        int ren;//人数 
    }hang[1001];
    struct lie_nt{
        int num;//行号 
        int ren;//人数 
    }lie[1001];
    bool comp_hang(const hang_nt a,const hang_nt b)//行上说话人数的比较 
    {
        return a.ren>b.ren;
    }
    bool comp_lie(const lie_nt a,const lie_nt b)//列上说话人数的比较 
    {
        return a.ren>b.ren;
    }
    bool comp_hang2(const hang_nt a,const hang_nt b)//行上说话人数的比较 
    {
        return a.num<b.num;
    }
    bool comp_lie2(const lie_nt a,const lie_nt b)//列上说话人数的比较 
    {
        return a.num<b.num;
    }
    int main()
    {
        int m,n,k,l,d;//m行 n列 k横向的 l纵向的 d对人
        scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
        for(int i=1;i<=m;i++)//行初始化
        {
            hang[i].num=i;
            hang[i].ren=0;
        }
        for(int i=1;i<=n;i++)//列初始化
        {
            lie[i].num=i;
            lie[i].ren=0;
        }
        //输入人数
        for(int i=1;i<=d;i++)
        {
            int x,y,x1,y1;
            scanf("%d%d%d%d",&x,&y,&x1,&y1);
            if(x==x1)
            {
                int min=y>y1? y1:y;
                lie[min].ren++;
            }
            if(y==y1)
            {
                int min=x>x1? x1:x;
                hang[min].ren++;
            }
            //统计人数 
        }
        sort(hang+1,hang+m+1,comp_hang);
        sort(lie+1,lie+n+1,comp_lie);
        sort(hang+1,hang+k+1,comp_hang2);
        sort(lie+1,lie+l+1,comp_lie2);  
    /*  
        for(int i=1;i<=m;i++)
        {
            printf("%d::%d\n",hang[i].num,hang[i].ren);
        }
         
        for(int i=1;i<=n;i++)
        {
            printf("%d::%d\n",lie[i].num,lie[i].ren);
        }
        */
        for(int i=1;i<=k;i++)
        {
            if(i==1)
            {
                printf("%d",hang[i].num);
            }
            else
            {
                printf(" %d",hang[i].num);
            }
        }
        printf("\n");
        for(int i=1;i<=l;i++)
        {
            if(i==1)
            {
                printf("%d",lie[i].num);
            }
            else
            {
                printf(" %d",lie[i].num);
            }
        }
        return 0;
    }
    

    Pascal :

    var
      flag,m,n,k,l,d,i,j,x,y,x1,y1:longint;
      tmp,col,row:array[1..1000] of longint;
    function min(a,b:longint):longint;
      begin
        if a<b then exit(a); exit(b);
      end;
    procedure qsort(m,n:Longint);
      var
        i,j,k,t:longint;
      begin
        i:=m;  j:=n;  k:=tmp[(i+j)div 2];
        repeat
          while tmp[i]>k do inc(i);
          while tmp[j]<k do dec(j);
          if i<=j  then
            begin
              t:=tmp[i]; tmp[i]:=tmp[j]; tmp[j]:=t;
              inc(I);  dec(J);
            end;
        until i>j;
        if m<j then qsort(m,j);
        if I<n then qsort(i,n);
      end;
    begin
      readln(m,n,k,L,d);
      fillchar(row,sizeof(row),0);
      fillchar(col,sizeof(col),0);
      for i:= 1 to d do
        begin
          readln(x,y,x1,y1);
          if (x=x1)
            then inc(col[min(y,y1)])
            else  inc(row[min(x,x1)]);
        end;
      j:=0;
      for i:= 1 to m do
        begin
          if row[i]>0 then
            begin
              inc(j);
              tmp[j]:=row[i];
            end;
        end;
      qsort(1,j);
      flag:=tmp[k];
      i:=1; j:=0;
      while  (i<=n) and (j<k) do
        begin
          if row[i]>=flag then
            begin
              write(i);
              inc(j);
              if j<>k then write(' ');
            end;
          inc(i);
        end;
      writeln;
      j:=0;
      for i:= 1 to n do
        begin
          if col[i]>0 then
            begin
              inc(j);
              tmp[j]:=col[i];
            end;
        end;
      qsort(1,j);
      flag:=tmp[L];
      i:=1;  j:=0;
       while  (i<=m) and (j<L) do
        begin
          if col[i]>=flag then
            begin
              write(i);
              inc(j);
              if j<>L then write(' ');
            end;
          inc(i);
        end;
    end.
    
    • 1

    信息

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