前四题都很简单,最后一题还没做。
前两题简单的懒得贴代码了。
C。其实还是很简单,但是因为有个地方考虑错了,后来被人 hack掉了,因为就做了一小时的比赛就睡觉了,起来后才发现被hack,所以特意把题目重新做了一遍,发现水题A的还是有点挫。。
好吧贴代码。
void solveC() { int n,k; cin>>n>>k; for(int i=0; i<n; i++) { scanf("%d",&a[i]); } sort(a,a+n); int num=0; for(int i=0;i<n;i++) { for(int j=n-i-1;j>=0;j--) { cout<<i+1; for(int l=n-1;l>=n-i;l--) { cout<<" "<<a[l]; } cout<<" "<<a[j]<<endl; num++; if(num>=k)break; } if(num>=k)break; } }
D。
struct kdq { int u,v; int next; } edge[1000005]; int num=0; int head[100005]; void insert(int u,int v) { edge[num].u=u; edge[num].v=v; edge[num].next=head[u]; head[u]=num++; } set<int >vv[100005]; int vis[100005]; void solveD() { int n,m; cin>>n>>m; memset(head,-1,sizeof(head)); for(int i=1; i<=n; i++) scanf("%d",&a[i]); while(m--) { int a1,b1; scanf("%d%d",&a1,&b1); insert(a1,b1); insert(b1,a1); } for(int i=1; i<=n; i++) { for(int j=head[i]; j!=-1; j=edge[j].next) { int v=edge[j].v; if(a[i]!=a[v])//不能将颜色一样的点加入到这一点的集合里面 vv[a[i]].insert(a[v]); } } int ans=-1; int color=-1; for(int i=1; i<=n; i++) { if(vis[a[i]])continue; int kk=vv[a[i]].size(); if(kk>ans) { ans=kk; color=a[i]; } else if(kk==ans) { if(color>a[i]) color=a[i]; } vis[a[i]]=1; } printf("%d\n",color); }
E。