现在的位置: 首页 > 综合 > 正文

CF #151 div 2

2013年08月18日 ⁄ 综合 ⁄ 共 1060字 ⁄ 字号 评论关闭

前四题都很简单,最后一题还没做。

前两题简单的懒得贴代码了。

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。

抱歉!评论已关闭.