zoukankan      html  css  js  c++  java
  • CODEFORCES ROUND #273 DIV2

    题目大意:

         A简单的说就是,有五个人,他们刚开始有B元,经过一系列过程后,给你他们现在分别有的钱,让你求出B(> <难得的傻逼题啊...但是要注意B是正整数!特判0)

         B有n个人,要分成m组,同组的两个人可为一对,问你形成的最多队和最少队(> <用贪心思想+排列组合乱搞搞就过了...)

         C有三种颜色的球,给你他们分别的数量,让你用这三种球装饰一个表?,只要满足三种颜色不完全相同就可以了,问你最多能装饰多少个表?

         D给你两种颜色的block,让你搭一个R-G tower(不需要红绿相间),每层都比上一层的block少1,并且每层的block颜色必须相同。问你,最大方案数对10^9+7取模是多少?

         E定义波浪数为在十进制表示法下 除了首位两位所有位均小于或大于周围两个数。然后给你N和K,求被N整除的第k小的波浪数 如果这个数<=10^14 输出这个数 否则输出-1


    先说一下C题

    很明显的贪心,自己写了40行左右的代码...而且是略复杂的思路

    然后看了时间最短的人的代码...瞬间有一种佩服得五体投地的感觉!

    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main() {
        long long a[3];
        cin>>a[0]>>a[1]>>a[2];
        long long x=a[0]+a[1]+a[2];
        x=x/3;
        sort(a,a+3);
        if(2*(a[0]+a[1])<=a[2])x=a[0]+a[1];
        cout<<x<<endl;
        return 0;
    }

    D题:DP+滚动数组

    ><我真的没乱讲...我是真的弱不会写><不要说我卖萌啦

    然后在codeforces上请教了zhyfzy(感谢)

    有想到f[i][j]=f[i-1][j]+f[i-1][j-i]转移方程

    但是看内存不够就以为是自己想错了

    ><没想到可以用滚动数组(自己弱没有想到...貌似加上没想到很奇怪?

    先解释一下转移方程:f[i][j]表示的是前i层,有j个红色的砖块的方案数

    f[i][j]=f[i-1][j](i行为绿色)+f[i][j-1](i行为红色)

    ><看了一下滚动数组,就是当你内存达到最大的时候,回到1...

    因为i要开1000,j要开2e5,所以用滚动数组优化,这样i只要开到2就可以了

    附上代码:

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<iostream>
    #include<algorithm>
    #include<set>
    #include<map>
    #include<stack>
    #include<vector>
    #include<queue>
    #include<string>
    #include<sstream>
    #define eps 0.000001
    #define ALL(x) x.begin(),x.end()
    #define INS(x) inserter(x,x.begin())
    #define MOD 1000000007
    using namespace std;
    typedef long long LL;
    int i,j,k,n,m,x,y,T,ans,big,cas,dp[2][200005],h,a,b,num[900],u,v;
    bool flag;
    int main()
    {
        scanf("%d%d",&a,&b);
        //h=(int)((sqrt(1+8*(a+b))-1)/2+eps)
        for (h=0;(h+1)*(h+2)/2<=a+b;h++);
        if (a>0) dp[0][1]=1; else dp[0][1]=0;
        if (b>0) dp[0][0]=1; else dp[0][0]=0;
        
        
        for (i=2,num[1]=1;i<=h;i++) num[i]+=num[i-1]+i; 
        for (i=2;i<=h;i++)
        {
            u=(i+1)%2;v=u^1;
            for (j=max(num[i]-b,0);j<=min(a,num[i]);j++)
            {
                dp[u][j]=dp[v][j];
                if (j>=i) dp[u][j]=(dp[u][j]+dp[v][j-i])%MOD;
            }
        }
        
        ans=0;u=(h+1)%2;
        for (i=max(num[h]-b,0);i<=min(a,num[h]);i++)
        {
            ans=(ans+dp[u][i])%MOD;
        }
        cout<<ans<<endl;
        //cout<<maxj<<endl;
        return 0;
    }View Code
    View Code

    A.B题太水了><

    A注意一下0,其他没有了,考你有没有到普及组水平

    B题考你有没有学过数学

    E题依旧不可写....QAQorz...

  • 相关阅读:
    Delphi 10.1.2 berlin开发跨平台APP的几点经验
    (矫情)关于编程(能力第一,其它不要多想)
    Xdite:永葆热情的上瘾式学习法(套路王:每天总结自己,反省自己的作息规律,找到自己的幸运时间、幸运方法,倒霉时间、倒霉方法。幸运是与注意力挂钩的。重复才能让自己登峰造极,主动去掉运气部分来训练自己。游戏吸引自己的几个原因非常适合训练自己)good
    无锡美新赵阳:创业18年,一辈子做好一家企业(创业是一种生活方式;为了赚钱而创业,那是扯淡”。最重要的是做自己喜欢做的事情)
    Delphi中流对象的应用
    多样性的配置来源
    WeText项目的服务端
    集线器,交换机,路由器
    不知道的JavaScript
    IPerf网络测试工具
  • 原文地址:https://www.cnblogs.com/polebug/p/4032765.html
Copyright © 2011-2022 走看看