这道题稍微思考一下就可以做出来
由题可知,每行每列可以隔开的同学不会重复,
所以只要将每行每列可以隔开的同学的对数统计出来,再从大到小排序,最后输出即可。
代码如下
#include<iostream> #include<algorithm> using namespace std; int ans_row[2005],ans_cul[2005]; struct pos_row { int x1 time; }row[2005]; struct pos_cul { int y1 time; }cul[2005];
bool cmp1(pos_row a,pos_row b) { return a.time>b.time; }
bool cmp2(pos_cul a,pos_cul b) { return a.time>b.time; }
int main() { int m,n,k,l,s,d; cin>>m>>n>>k>>l>>d; for(int i=1;i<=m;i++) { row[i].x1=i; cul[i].y1=i; } int x1,x2,y1,y2; for(int i=0;i<d;i++) { cin>>x1>>y1>>x2>>y2; if(x1!=x2) row[min(x1,x2)].time++; else cul[min(y1,y2)].time++; } sort(row+1,row+m+1,cmp1); sort(cul+1,cul+n+1,cmp2); for(int i=1;i<=k;i++) ans_row[i]=row[i].x1; for(int i=1;i<=l;i++) ans_cul[i]=cul[i].y1; sort(ans_row+1,ans_row+k+1); sort(ans_cul+1,ans_cul+l+1); for(int i=1;i<=k;i++) cout<<ans_row[i]<<" "; cout<<endl; for(int i=1;i<=l;i++) cout<<ans_cul[i]<<" "; }
|