zoukankan      html  css  js  c++  java
  • Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition)

    A. Bear and Game

    题意:一个体育节目,它可能在某一分钟是很有趣的,其他时间都是很无聊的,如果持续十五分钟都很无聊的话那么Bear就会关掉电视,问什么时候会关掉电视。

    题解:用第i个有趣的时间减去第i-1个有趣的时间,如果差值大于十五分钟那就输出第i个有趣的时间+15。注意第一个有趣的时间要为0,最后一个为90。

    代码:

     1 /*A*/
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 const int maxn=95;
     6 
     7 int main()
     8 {
     9     int n;
    10     while(scanf("%d",&n)!=EOF)
    11     {
    12         int a[maxn];
    13         a[0]=0;
    14         for(int i=1;i<=n;i++)
    15             scanf("%d",&a[i]);
    16         a[n+1]=90;
    17         int ans=90;
    18         for(int i=1;i<=n+1;i++)
    19         {
    20             if((a[i]-a[i-1])>15)
    21             {
    22                 ans=a[i-1]+15;
    23                 break;
    24             }
    25         }
    26         if(ans>90)    ans=90;
    27         printf("%d
    ",ans);
    28     }
    29     return 0;
    30 }
    View Code

    B. Problems for Round

    题意:有一些题目,要分成div1和div2两个部分。同时要满足这些条件:

    1.每个部分的题目数都不能为0 。  

    2.每个题目只用属于一个部分。

    3.每个div1的题目都要比div2的题目难。

    4.如果两个题目是相似的,那么他们要分别属于两个部分。

    给出题目数量n,相似的题目对数。n个题目的难度系数为1~n。

    题解:根据给的相似的题目,我们可判断出这两个中简单的在div2,难的在div1同时还可以知道,比简单的那个题目更简单的所有题目都会在div2,难的同理。比如:有5个题目,那么难度系数分别为1,2,3,4,5现在给出4,2,是相似的,那么2肯定在div2,4肯定在div1,因为每个div1的题目都要比div2的题目简单,所以 1肯定也是在div2 的,5肯定在div1。也就是说我们只要找到div2 中最难的题目max和div1中最简单的题目min,然后就可以确定比max简单的都在div2,比min难的都在div1。如果max>=min,说明有交叉,肯定是不行的,那么输出0。如果max<min我们可以求出d=min-max-1,就是中间还没有确定在哪个部分的题目,用隔板法可以知道有d+1种方法。不过因为每个部分都要有题目,所以当d==n的时候答案要-2。

    代码:

     1 /*B*/
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 const int maxn=100000+100;
     7 
     8 int main()
     9 {
    10     int n,m;
    11     while(scanf("%d%d",&n,&m)!=EOF)
    12     {
    13         int a,b;
    14         int max=0;
    15         int min=n+1;
    16         int flag=1;
    17         for(int i=0;i<m;i++)
    18         {
    19             scanf("%d%d",&a,&b);
    20             if(a>b)
    21             {
    22                 a=a+b;
    23                 b=a-b;
    24                 a=a-b;
    25             }
    26             if(a>max)
    27                 max=a;
    28             if(b<min)
    29                 min=b;
    30             if(min<=max)
    31                 flag=0;
    32         }
    33         if(flag==0)
    34             printf("0
    ");
    35         else
    36         {
    37             int d=min-max-1;
    38             int ans=d+1;
    39             if(d==n)
    40                 ans-=2;
    41             printf("%d
    ",ans);
    42         }    
    43     }
    44     return 0;
    45  } 
    View Code

    C. Bear and Colors

    题意:有个不同颜色的球,每个颜色就是一个编号。现在定义一段(子序列)中的主色,就是一段中颜色数量最多的那个颜色,如果数量相同,那么就是编号最小的那个。现在求每个颜色在多少个段中为主色。

    题解:用两个for循环,计算从i到j 这个段中的主色。用一个数组来记录每个颜色是数量,同时更新maxt(数量),和maxp(颜色),得出一段中的主色,最后更新到ans数组。

    代码:

     1 /*C*/
     2 #include<cstdio>
     3 #include<cstring>
     4 using namespace std;
     5 
     6 const int maxn=5000+10;
     7 
     8 int main()
     9 {
    10     int n;
    11     while(scanf("%d",&n)!=EOF)
    12     {
    13         int t[maxn];
    14         for(int i=0;i<n;i++)
    15             scanf("%d",&t[i]);
    16         int ans[maxn];
    17         int a[maxn];
    18         memset(ans,0,sizeof(ans));
    19         int maxt=0,maxp;
    20         for(int i=0;i<n;i++)
    21         {
    22             memset(a,0,sizeof(a));
    23             maxt=0;maxp=0;
    24             for(int j=i;j<n;j++)
    25             {
    26                 a[t[j]]++;
    27                 if(a[t[j]]>maxt)
    28                 {
    29                     maxt=a[t[j]];
    30                     maxp=t[j];
    31                 }
    32                 else if(a[t[j]]==maxt)
    33                 {
    34                     if(t[j]<maxp)
    35                         maxp=t[j];
    36                 }
    37                 ans[maxp]++;
    38             } 
    39         }
    40         printf("%d",ans[1]);
    41         for(int i=2;i<=n;i++)
    42             printf(" %d",ans[i]);
    43         printf("
    ");
    44     }
    45     return 0;
    46 }
    View Code
  • 相关阅读:
    Python之路第十二天,高级(5)-Python操作Mysql,SqlAlchemy
    Python之路第十二天,高级(4)-Python操作rabbitMQ
    Python之路第十一天,高级(3)-线程池
    day11 消息队列、多线程、多进程、协程
    day10 多进程、多线程(一)
    day09编程之socket
    day08面向对象(二)
    day07面向对象(初级篇)
    day06反射和正则
    day05开发 (字符串格式化和常用模块)
  • 原文地址:https://www.cnblogs.com/yepiaoling/p/5478741.html
Copyright © 2011-2022 走看看