Codeforces 451E Devu and Flowers(容斥原理)

Codeforces 451E Devu and Flowers(容斥原理)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

题目链接:Codeforces 451E Devu and Flowers

题目大意:有n个花坛。要选s支花,每一个花坛有f[i]支花。同一个花坛的花颜色同样,不同花坛的花颜色不同,问说能够有多少种组合。

解题思路:2n的状态,枚举说那些花坛的花取超过了,剩下的用C(n1sum+n1)隔板法计算个数。注意奇数的位置要用减的。偶数的位置用加的。容斥原理。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>

using namespace std;
typedef long long ll;

//ll n, m, p;

ll qPow (ll a, ll k, ll p) {
    ll ans = 1;

    while (k) {
        if (k&1)
            ans = (ans * a) % p;
        a = (a * a) % p;
        k /= 2;
    }
    return ans;
}

ll C (ll a, ll b, ll p) {

    if (a < b)
        return 0;

    if (b > a - b)
        b = a - b;

    ll up = 1, down = 1;

    for (ll i = 0; i < b; i++) {
        up = up * (a-i) % p;
        down = down * (i+1) % p;
    }
    return up * qPow(down, p-2, p) % p; // 逆元
}

ll lucas (ll a, ll b, ll p) {
    if (b == 0)
        return 1;
    return C(a%p, b%p, p) * lucas(a/p, b/p, p) % p;
}

const int maxn = 25;
const ll mod = 1e9+7;
int n;
ll s, f[maxn];

ll solve () {
    ll ans = 0;
    for (int i = 0; i < (1<<n); i++) {
        ll sign = 1, sum = s;
        for (int j = 0; j < n; j++) {
            if (i&(1<<j)) {
                sum -= (f[j]+1);
                sign *= -1;
            }
        }

        if (sum < 0)
            continue;
        ans += sign * lucas(sum + n - 1, n - 1, mod);
        ans %= mod;
    }
    return (ans + mod) % mod;
}

int main () {
    scanf("%d%lld", &n, &s);
    for (int i = 0; i < n; i++)
        scanf("%lld", &f[i]);
    printf("%lld\n", solve());
    return 0;
}

版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116975.html原文链接:https://javaforall.net

(0)
上一篇 2022年1月12日 下午4:00
下一篇 2022年1月12日 下午4:00


相关推荐

  • PHP简单留言板代码[通俗易懂]

    PHP简单留言板代码[通俗易懂]&lt;HTML&gt;//留言板主题作者…

    2022年8月30日
    4
  • 保姆级教程,Linux静态IP设置的技巧

    保姆级教程,Linux静态IP设置的技巧介绍如何使用VMware虚拟机Linux系统的Ubuntu16.04发行版进行静态IP设置。设置固定IP非常重要,可以避免因IP的改变,而导致原本搭建的环境失效等情况的出现。

    2022年5月13日
    37
  • tp3,nginx配置支持pathinfo

    tp3,nginx配置支持pathinfoNginx 默认是不支持 PATHINFO 的第一步 修改 server 块 server listen80 server namewww domain comdomain com error page404 404 html error page50050250 50x html 这个 locat

    2025年9月16日
    5
  • Coze零代码部署OpenClaw(小龙虾) 全流程保姆级教学

    Coze零代码部署OpenClaw(小龙虾) 全流程保姆级教学

    2026年3月14日
    2
  • 红楼品鉴「建议收藏」

    红楼品鉴「建议收藏」红楼梦曹雪芹(1715-1763)案头文学,很多心理活动,心理描写很成功,特别是黛玉,因此在电视剧中黛玉的角色很难演,但是在戏曲中通过唱词比较好表达。本人强推裴效维评注的红楼梦版本,全套三本,评注很详细,有很多诗词的解释。(一)人物关系贾代善娶了金陵史家的小姐(贾母)宁国府人丁稀少,贾敬很早就到寺庙里炼丹求药,将他的爵位世袭给了贾珍。水字辈、代字辈、文字辈、…

    2022年6月8日
    33
  • 使用java发邮件,附jar包

    使用java发邮件,附jar包本人小白,很多都是转载资料,只是学习研究一下!需要用到发邮件的朋友可以看一下,我们需要用到三个包,分别是commos-email.jar,javax.activation-1.1.0.jar,mail.jar,下面我已经给打家打包好了。点我进百度云下载,我们以qq邮箱为例子我们先去qq邮箱的设置里面给自己开通SMTP服务,然后记好你的授权码,下面会要用到,好了下面上代码。importj…

    2022年5月14日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号