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

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

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

题目链接:Codeforces 451E Devu and Flowers

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

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

#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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Hadoop面试题[通俗易懂]

    Hadoop面试题[通俗易懂]文章目录你们公司集群有多少机器,内存,硬盘,CPU?你们Hadoop、Hive、Kafka都是什么版本?你们每天的数据量有多少?数据总量是多少?分布式和集群的区别?Hadoop1和Hadoop2的区别?Hadoop1Hadoop2NameNode运行处理什么是Hadoop?说一说Hadoop的shuffle过程?Hadoop中为什么需要排序?HDFS相关概念特点缺点BlockNameNodeDataNodeEditLogFSImageSecondaryNameNodefsimage和edits合

    2022年6月29日
  • 手机打开照相机_安卓11调用第三方相机

    手机打开照相机_安卓11调用第三方相机打开相机布局代码<Buttonandroid:id=”@+id/take_photo”android:layout_width=”match_parent”android:layout_height=”wrap_content”android:layout_gravity=”center”android:text=”打开相机”/><Buttonandroid:id=”@+id/chose_photo”andro

    2022年9月22日
  • PyCharm 支持中文和代理方法[通俗易懂]

    PyCharm 支持中文和代理方法[通俗易懂]在代码的开头(import语句之前)添加#coding:utf-8这样就可在代码及注释中包含中文了,并且输出也可以是中文

    2022年8月26日
  • jsonobject转map对象 fastjson_javaxml转对象

    jsonobject转map对象 fastjson_javaxml转对象1.示例代码importcom.alibaba.fastjson.JSONObject;importcom.alibaba.fastjson.TypeReference;JSONObjectobj=newJSONObject();{ obj.put(“key1″,”value1”); obj.put(“key2″,”value2”); obj.put(“key3″,”value3”);}Map<String,Integer>params=JSONO

    2022年8月23日
  • MongoDB启动失败原因「建议收藏」

    MongoDB启动失败原因「建议收藏」MongoDB启动失败原因今天某个项目突然登录不了,查看服务器发现是后端出现异常,停掉后端重新启动的时候失败,显示是数据库连接失败,然后接着查看数据库,发现数据库连接失败,原因是数据库挂掉了。数据库用的是MongoDB,我也只是听过还没有使用过,简单的在网上查询了一下MongoDB的启动命令就直接开始启动了,结果发现启动失败。尝试了好一些方法后才终于成功启动:尝试提升MongoDB所在文…

    2022年10月30日
  • 中国历年人口出生数1983至2020岁_中国历年出生人口数据

    中国历年人口出生数1983至2020岁_中国历年出生人口数据1983年:2052万1984年:2050万1985年:2196万1986年:2374万1987年:2508万1988年:2445万1989年:2396万1990年:2374万1991年:2250万1992年:2113万1993年:2120万1994年:2098万1995年:2052万1996年:2057万1997年:2028万1998年:1934万1999年:1827万2000年:1765万2001年:1696万2002年:1641万2003年:1594万200.

    2022年9月5日

发表回复

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

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