这是一题模拟加桶排。
先分支判断是行相邻还是列相邻,再用2个数组分别存储行和列的过道可以隔开多少对,找出可以隔开的最多的过道,并输出。
#include<bits/stdc++.h> using namespace std; int m,n,k,l,d; int x[1005],y[1005]; int c[1005],o[1005]; int main() { scanf("%d%d%d%d%d",&m,&n,&k,&l,&d); for(int i=1;i<=d;i++) { int xi,yi,p,q; scanf("%d%d%d%d",&xi,&yi,&p,&q); if(xi==p) x[min(yi,q)]++; else y[min(xi,p)]++; } for(int i=1;i<=k;i++) { int maxn=-1,p; for(int j=1;j<m;j++) if(y[j]>maxn) { maxn=y[j]; p=j; } y[p]=0; c[p]++; } for(int i=1;i<=l;i++) { int maxn=-1,p; for(int j=1;j<n;j++) if(x[j]>maxn) { maxn=x[j]; p=j; } x[p]=0; o[p]++; } for(int i=0;i<1005;i++) if(c[i]) printf("%d ",i); printf("\n"); for(int i=0;i<1005;i++) if(o[i]) printf("%d ",i); return 0; }
原文:https://www.cnblogs.com/Siv0106/p/11713406.html