zoukankan      html  css  js  c++  java
  • Codeforces Round #322 (Div. 2) A B C

    比赛地址:http://codeforces.com/contest/581

    A题

    大水题,n双红袜子,m双蓝袜子,求有几天可以混着穿,有几天可以有袜子穿。

    AC代码:

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <math.h>
    #define INF 0x3f3f3f3f
    using namespace std;
    
    int main()
    {
        int n,m;
        while(~scanf("%d%d",&n,&m))
        {
            printf("%d %d
    ",min(n,m),(max(n,m)-min(n,m))/2);
        }
        return 0;
    }
    

    B题

    题意:给一个数列,问从最右边开始的每个数,需要加多少才能成为到目前为止最大的数。

    记录一下当前最大值,然后确定一下到底需要加多少,记录一下,输出。

    AC代码:

    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    #include <math.h>
    #define INF 0x3f3f3f3f
    using namespace std;
    int s[101101],vis[101101];
    int main()
    {
        int n,m;
        while(~scanf("%d",&n))
        {
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&s[i]);
            }
            int max1=-1;
            for(int i=n;i>=1;i--)
            {
                if(s[i]>max1)
                {
                    max1=s[i];
                    vis[i]=0;
                }
                else
                {
                    vis[i]=max1-s[i]+1;
                }
            }
            for(int i=1;i<=n;i++)
            {
                printf("%d",vis[i]);
                if(i!=n)
                {
                    printf(" ");
                }
                else
                {
                    printf("
    ");
                }
            }
        }
        return 0;
    }
    

    C题

    贪心

    卧槽终于做到C题了好鸡冻!!!

    然而并没有,BIG WATER PROBLEM!!

    题意:n个技能,m个加速器,每个加速器可以为技能加一(技能不能超过100),要求【技能值/10】的最大和。

    很明显,如果使用加速器的话,最好的结果是,用加速器让更多的数达到10,这样的话就可以使得最后的和最大了!!

    根据数字的个位数与10的距离sort一下,小的在前面。

    然后遍历一遍,看能让几个数字成为下一个10的倍数。

    两个小trick:
    1.加技能的时候,技能值不能超过100.

    2.如果所有的数字都达到了10的倍数,而且加速器还有剩余,那么就比较一下(n*10-已经被加速的,m/10);

    TALK IS CHEAP !

    SHOW CODE !

    AC 代码:

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    #include <algorithm>
    using namespace std;
    struct node
    {
        int a;
        int b;
    } s[101101];
    bool cmp(node A,node B)
    {
        return A.b>B.b;
    }
    int main()
    {
        int n,m;
        while(~scanf("%d%d",&n,&m))
        {
            int ss=0;   
            for(int i=0; i<n; i++)
            {
                scanf("%d",&s[i].a);
                s[i].b=s[i].a % 10;
                ss+=s[i].b+90;
            }
            sort(s,s+n,cmp);
            for(int i=0; i<n; i++)
            {
                int k=10-s[i].b;
                if(m>=k)
                {
                    if((s[i].a+k)<=100)
                    {
                        m-=k;
                        s[i].a+=k;
                    }
                }
                else
                {
                    m=0;
                    break;
                }
            }
            int sum=0;
            for(int i=0; i<n; i++)
            {
                int k1= s[i].a / 10 ;
                sum+=k1;
            }
            if(m>0)
            {
                sum+=min(m/10,(10*n)-sum);
            }
            printf("%d
    ",sum);
        }
        return 0;
    }
    

      

  • 相关阅读:
    bootstrap 兼容 IE8
    在IE8的基础上安装IE11
    前台
    dll 库文件下载地址
    年轻
    linux 异常
    Navicat断网时连不上数据库
    jQuery
    破解版 Teamver 安装
    mysql
  • 原文地址:https://www.cnblogs.com/qioalu/p/4875736.html
Copyright © 2011-2022 走看看