当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,