牛客编程巅峰赛:挑选方案问题(生成函数)

链接:https://ac.nowcoder.com/acm/contest/10323/B
来源:牛客网
 

题目描述

自助餐厅里有5个盘子,里面装的都是面包。

第1个盘子里有无限个面包;

第2个盘子里只有1个面包;

第3个盘子里只有4个面包;

第4个盘子里也有无限个面包,但必须两个两个地拿;

第5个盘子里也有无限个面包,但必须5个5个地拿;

给定正整数n,求有多少种正好拿出n个面包的方案。

方案a和方案b不同,当且仅当方案a存在从某个盘子里拿出面包的数量与方案b中对应盘子拿出的数量不同。

示例1

输入

1

返回值

3

说明

有3种方案:

在第一个盘子拿一个。

在第二个盘子拿一个。

在第三个盘子拿一个。

示例2

输入

2

返回值

6

说明

有6种方案:

在第一个盘子拿2个。

在第一个盘子拿1个,第二个盘子拿1个。

在第一个盘子拿1个,第三个盘子拿1个。

在第二个盘子拿1个,第三个盘子拿1个。

在第三个盘子拿2个。

在第四个盘子拿2个。

(请注意由于第四个盘子里只能两个两个拿,所以必须拿偶数个)

备注:

n<=10^9

数据仅包含一个正整数n

输出一个正整数表示答案。

思路:该题在比赛时我是通过打表找规律的,而正确的做法是使用生成函数的一般做法,具体过程讨论区已有详解,这里直接贴出大佬的推论

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 
     * @param n int整型 
     * @return long长整型
     */
    long long wwork(int n) {
        // write code here
        return (n+1L)*(n+2)/2;
    }
};

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值