1. 程式人生 > 實用技巧 >【OGF生成函式板子題】牛客程式設計巔峰賽S2第11場 C 挑選方案問題

【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板子題呀

\[\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\)
計算的時候寫的時候看錯了一項,賽後過題嗚嗚嗚

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;
    }
};