CF #151 div 2
前四题都很简单,最后一题还没做。
前两题简单的懒得贴代码了。
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。
补充:软件开发 , C++ ,