前四題都很簡單,最後一題還沒做。
前兩題簡單的懶得貼代碼了。
C。其實還是很簡單,但是因為有個地方考慮錯了,後來被人 hack掉了,因為就做了一小時的比賽就睡覺了,起來後才發現被hack,所以特意把題目重新做了一遍,發現水題A的還是有點挫。。
好吧貼代碼。
[cpp]
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。
[cpp]
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。