1 条题解
-
0
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
- 上传者