• 【OGF生成函数板子题】牛客编程巅峰赛S2第11场 C 挑选方案问题


    题目链接

    https://ac.nowcoder.com/acm/contest/10322/C

    题面

    自助餐厅里有5个盘子,里面装的都是面包。
    第1个盘子里有无限个面包;
    第2个盘子里只有1个面包;
    第3个盘子里只有4个面包;
    第4个盘子里也有无限个面包,但必须两个两个地拿;
    第5个盘子里也有无限个面包,但必须5个5个地拿;
    给定正整数n,求有多少种正好拿出n个面包的方案。
    方案a和方案b不同,当且仅当方案a存在从某个盘子里拿出面包的数量与方案b中对应盘子拿出的数量不同。
    n<=10^9
    数据仅包含一个正整数n
    输出一个正整数表示答案。

    解题思路

    这一眼看过去就是OGF板子题
    或者让现在的我来看,就是5个序列做卷积

    [frac{1}{1-x}(1+x)(1+x+x^2+x^3+x^4)frac{1}{1-x^2}frac{1}{1-x^5} ]

    结果扔到mma里给我算出来这玩意??

    我临时找到一种办法

    下面的AC代码思路很明显了,算卷积结果在某点处的值
    标答给的是((n+1)(n+2)/2),最后可以化简成这样,考试的时候没想起来

    [sum_{n=0}^{infty}inom{n+2}{2}x^n=1/(1-x)^3 ]

    计算的时候写的时候看错了一项,赛后过题呜呜呜
    嗯复杂度看起来过不去,可能数据出的水就过了?

    AC代码

    class Solution {
    public:
        /**
         * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
         * 
         * @param n int整型 
         * @return long长整型
         */
        long long wwork(int n) {
            // write code here
    
            long long ans=0;
            for(long long i=0;i<=n;i++){
    
                if((n-i)%5==0){
                    if(i>=2)
                      ans+=(5*i-5);
                    else if(i==0)
                       ans+=1;
                    else if(i==1)
                        ans+=3;
                    else if(i==2)
                        ans+=6;
                }
            }
            return  ans;
        }
    };
    
  • 相关阅读:
    MKMapViewDelegate
    MKMapView
    正则表达式随手篇
    c#多线程
    sql模糊查询效率
    c#多线程,进度条,实时给前台发送数据
    如何使用CocoaPods
    TabBar自定义方式(一)
    Spring MVC 学习资料
    优化Myeclipse10 Building Workspace速度慢等问题
  • 原文地址:https://www.cnblogs.com/yhm138/p/14179971.html
Copyright © 2020-2023  润新知