2 条题解

  • 4
    @ 2023-2-11 14:50:07
    #include<bits/stdc++.h>
    using namespace std;
    int main()
    {
        int a[2500]={};
        int a1[2500]={};
        int b1[2500]={};
        int b[2500]={};
        int M,N,K,L,D,x1,x2,y1,y2;
        scanf("%d%d%d%d%d",&M,&N,&K,&L,&D);
        for(int i=1;i<=D;i++)
        {
        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
        if (x1!=x2) 
          if (x1>x2) b[x2]++;
            else b[x1]++;
          else if(y1>y2) a[y2]++;
                 else a[y1]++;
        }
        int max=0,x=0;
        for(int i=1;i<=K;i++)
        {
            max=0;
            x=0;
            for(int j=1;j<=M;j++)
              if (b[j]>max) max=b[j],x=j;
            a1[i]=x;
            b[x]=0;
        }
        for(int i=1;i<=L;i++)
        {
            max=0;
            x=0;
            for(int j=1;j<=N;j++)
              if (a[j]>max) max=a[j],x=j;
            b1[i]=x;
            a[x]=0;
        }
        sort(a1,a1+K+1);
        for(int i=1;i<=K;i++)
          printf("%d ",a1[i]);
        cout<<endl;
        sort(b1,b1+L+1);
        for(int i=1;i<=L;i++)
          printf("%d ",b1[i]);
        return 0;
    }
    
    • 3
      @ 2022-9-11 20:56:40

      这是一个比赛真题我就纳闷了别的题就有题解比赛真题就没人写

      哈哈!那第一个题解我就笑纳了😄

      首先这是一道贪心的题目 image

      我们先考虑行:

      只要两个"*"和两个"+"之间加一条通道行就好了

      然后考虑列:

      两个"※"之间加一条通道即可❤️

      那么程序就是这样在编的:

      scanf("%d%d%d%d%d",&m,&n,&k,&l,&d);
      memset(h,0,sizeof(h));
      memset(s,0,sizeof(s));
      for(int i=1;i<=d;i++){
      	int x,y,p,q;
         scanf("%d%d%d%d",&x,&y,&p,&q);
      	if(x==p) ++s[min(y,q)];
      	else ++h[min(x,p)];
      }
      for(int i=1;i<=m;i++) q[i]=i;
      for(int i=1;i<=m;i++){
      	for(int j=i+1;j<=m;j++){
      		if(h[j]>h[i]){
      			swap(h[i],h[j]);
      			swap(q[i],q[j]);
      		}
      	}
      }
      for(int i=1;i<=k;i++){
      	for(int j=i+1;j<=k;j++){
      		if(q[j]<q[i]){
      			swap(q[i],q[j]);
      		}
      	}
      }
      for(int i=1;i<=k;i++){
      	printf("%d",q[i]);
      	if(i!=k){
      		printf(" ");
      	}
      }
      printf("\n");
      for(int i=1;i<=n;i++) q[i]=i;
      for(int i=1;i<=n;i++){
      	for(int j=i+1;j<=n;j++){
      		if(s[j]>s[i]){
      			swap(s[i],s[j]);
      			swap(q[i],q[j]);
      		}
      	}
      }
      for(int i=1;i<=l;i++){
      	for(int j=i+1;j<=l;j++){
      		if(q[j]<q[i]){
      			swap(q[i],q[j]);
      		}
      	}
      }
      for(int i=1;i<=l;i++){
      	printf("%d",q[i]);
      	if(i!=l){
      		printf(" ");
      	}
      }
      

      用的头是作者最喜欢用的头🚀️

      题解不易,点个赞赞❤️

      • 1

      信息

      ID
      793
      时间
      1000ms
      内存
      64MiB
      难度
      1
      标签
      递交数
      46
      已通过
      36
      上传者