因为行和列有不同的划分,所以要分别处理行和列
每次输入两个人的坐标后,判断是在行还是列进行划分,在这一行(列)进行计数
最后按照计数的大小排序一下即可
因为输出要按照从小到大,所以再对序号进行一次排序
#include <cstdio> #include <iostream> #include <algorithm> #include <cstring> #include <string> #include <stack> #include <queue> #include <cmath> #define ll long long #define pi 3.1415927 #define inf 0x3f3f3f3f #define mod 1000000007 using namespace std; #define _int __int128_t inline int read() { int x=0,f=1; char c=getchar(); while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();} while(c>='0'&&c<='9') x=(x<<1)+(x<<3)+c-'0',c=getchar(); return f*x; } void print(int x) { if(x < 0) {putchar('-');x = -x;} if(x/10) print(x/10); putchar(x%10+'0'); } int n,m; struct node{ int w,t; }ro[1005],lo[1005]; bool cmp(node x, node y) { return x.w>y.w; } bool tep(node x, node y) { return x.t<y.t; } int main () { int T,i,t,j,k,l,d,sum=0; cin>>m>>n>>k>>l>>d; for(i=1;i<=d;++i){ int x=read(),y=read(),p=read(),q=read(); if(x==p){ j=min(y,q); lo[j].w++; lo[j].t=j; } else{ j=min(x,p); ro[j].w++; ro[j].t=j; } } sort(ro+1,ro+m+1,cmp); sort(lo+1,lo+n+1,cmp); sort(ro+1,ro+k+1,tep); sort(lo+1,lo+l+1,tep); for(i=1;i<=k;++i){ if(i!=k) printf("%d ",ro[i].t); else printf("%d\n",ro[i].t); } for(i=1;i<=l;++i){ if(i!=l) printf("%d ",lo[i].t); else printf("%d\n",lo[i].t); } return 0; }