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

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • eclipse如何导入java文件_xml表格

    eclipse如何导入java文件_xml表格代码快速实现xml转换为Excel(xml转excel通用类-java-完成代码可作工具使用)用代码实现xml文件/数据转换为excel文件。(java)—-何潮背景:最近项目要做导出功能,但导出的数据对象类型实在太多了,一个个去实现;实在是没心情去做。于是———-意义:快速实现数据导出为什么是xmltoexcel?因为项目中可以直接使用xml数据。所以就选择xm…

  • linux x11vnc,X11vnc (简体中文)[通俗易懂]

    linux x11vnc,X11vnc (简体中文)[通俗易懂]WARNING:这将建立一个没有密码的VNC.意思是任何人都可以通过网络访问你的VNC并且能看到你的X界面.可以非常简单的通过SSH连接来避免这样的事情.设置x11vnc安装pacman-Sx11vnc运行首先你需要运行一个xserver服务器.使用startx或类似的.完成后运行startxx11vnc-display:0-auth~/.Xauthority如果失败,你…

    2022年10月23日
  • 面试之ActiveMQ

    面试之ActiveMQ面试之ActiveMQ

  • spring cloud总览和架构图[通俗易懂]

    spring cloud总览和架构图[通俗易懂]本节主要是根据微服务的技术架构图,介绍下springcloud微服务体系中的核心组件。下面是spring官网的springcloud微服务架构图:核心组件说明:分享2张微服务的架构图:之后的文章中,会针对各组件和底层原理调优,以及工作中遇到的一些坑,进行一些记录和说明。1、各组件的原理和使用2、服务划分和数据库拆分思路3、微服务的部署方案4、微服务中的一些优化…

  • idea2021.5.5激活码[在线序列号]

    idea2021.5.5激活码[在线序列号],https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • python 安装whl文件「建议收藏」

    python 安装whl文件「建议收藏」python安装whl文件使用场景:在terminal中通过pipinstall命令进行第三方模块安装时,由于网络获其他原因会使得第三方模块下载失败,导致安装失败。此时,我们可以先通过下载网址将第三方模块包手动下载到本地,再手动进行安装。许多第三方模块包为whl文件,这就…

发表回复

您的电子邮箱地址不会被公开。

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