• Codeforces Round #151 (Div. 2)笔记


    今天应该算第一次开始做CF,把当时没搞出来的题目总结一下吧

    C. Beauty Pageant

    题意:

      给N个互不相同的数字,要组成M(M<=N*(N+1)/2)种不同的SUM,要求输出每种组成的方法.

    错误思路:

      比赛的时候没有注意M的数据范围...结果居然写了个深搜...OMG,这明显要超时的节奏啊,没想到交上去以后样例居然过了,看来比赛中的样例M是不够大啊...不过中途还是被某个牛人hack掉了- -。

    正确思路:

      注意到M的范围很重要,因为一共有N个数字,假设现在要一个L个人的组合,那么可以固定L-1个人(直接取最后L-1个人就好了,很方便),剩下的N-L+1个人依次可以和这L-1个人组合,得到一个人数为L的SUM,这样可以保证人数为L的组合的SUM是没有重复的,现在我们再加入一个排序,让数组是从小到大排列的,这样一来,由于每次都取数组最后的几个数,而L+1个人的组合比L个人的组合多一个人,也就是L+1组成的SUM一定大于L个人组成的SUM,这样确保了唯一性,且正好能得到N*(N-1)/2种情况.

    代码:

    View Code
    #include<stdio.h>
    #include<stdlib.h>
    
    int va[60];
    
    int cmp(const void *a,const void *b)
    {
        return *(int *)a-*(int *)b;
    }
    
    int main()
    {
        int n,k,i,j,ll;
        while(scanf("%d%d",&n,&k)!=EOF)
        {
            for(i=1;i<=n;i++)
            {
                scanf("%d",&va[i]);
            }
            qsort(va+1,n,sizeof(va[0]),cmp);
            for(i=0;i<n;i++)
            {
                if(k==0)break;
                for(j=1;j+i<=n;j++)
                {
                    if(k==0)break;
                    printf("%d",i+1);
                    for(ll=n;ll>n-i;ll--)
                    {
                        printf(" %d",va[ll]);
                    }
                    printf(" %d\n",va[j]);
                    k--;
                }
            }
        }
        return 0;
    }

    D. Colorful Graph

    题意:

      给你N个点和M条边,每个点有一个颜色,每个颜色的价值=与这个颜色的点相邻的不同颜色的个数.

    错误思路:

      这个思路已经不用说了吧...大家都知道的...把每个颜色相邻的颜色都记录下来,然后排序判重...当时读题的时候C题被黑掉了,直接导致D题看得太快理解错了题意,最后就没时间搞了.这题着实是亏大了ToT.

    正确思路:

      同上,详见代码,不过要特别注意每个颜色的相邻颜色都是本身的情况需要特判.

    View Code
    #include<stdio.h>
    #include<stdlib.h>
    
    struct node
    {
        int x,y;
    }seg[210000];
    
    int va[110000];
    int cmp(const void *a,const void *b)
    {
        if((*(node *)a).x==(*(node *)b).x)
            return (*(node *)a).y-(*(node *)b).y;
        else
            return (*(node *)a).x-(*(node *)b).x;
    }
    
    int cmp2(const void *a,const void *b)
    {
        return *(int *)a-*(int *)b;
    }
    
    int main()
    {
        int n,m,temp1,temp2;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&va[i]);
            }
            int cnt=0;
            while(m--)
            {
                scanf("%d%d",&temp1,&temp2);
                if(va[temp1]!=va[temp2])
                {
                    seg[cnt].x=va[temp1];
                    seg[cnt++].y=va[temp2];
                    seg[cnt].x=va[temp2];
                    seg[cnt++].y=va[temp1];
                }
            }
            qsort(seg,cnt,sizeof(seg[0]),cmp);
            int max=0,ans=0,count=0;
            for(int i=0;i<cnt;i++)
            {
                if(seg[i].x==seg[i+1].x&&seg[i].y!=seg[i+1].y)
                    count++;
                else if(seg[i].x!=seg[i+1].x)
                {
                    count++;
                    if(count>max)
                    {
                        max=count;
                        ans=seg[i].x;
                    }
                    count=0;
                }
            }
            if(max==0)
            {
                qsort(va+1,n,sizeof(va[0]),cmp2);
                printf("%d\n",va[1]);
            }
            else
                printf("%d\n",ans);
        }
        return 0;
    }
  • 相关阅读:
    Linux的CPU负载
    C++ 内接连与外接连
    boost 串口通信
    创建型模式--单例模式
    Python urllib与urllib2
    CodeBlocks使用boost+MinGW
    Python 线程(七):local(线程局部存储)
    Python 线程(六):Timer(定时器)
    Python 线程(五):Event
    Python 线程(四):Semphore同步
  • 原文地址:https://www.cnblogs.com/SolarWings/p/2782173.html
Copyright © 2020-2023  润新知