2 条题解
-
4
#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
这是一个比赛真题我就纳闷了别的题就有题解比赛真题就没人写
哈哈!那第一个题解我就笑纳了😄
首先这是一道贪心的题目
我们先考虑行:
只要两个"*"和两个"+"之间加一条通道行就好了
然后考虑列:
两个"※"之间加一条通道即可❤️
那么程序就是这样在编的:
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
- 上传者