G: 聚会 摸底测试

博客讨论了G聚会的摸底测试题目,其中涉及n个人选择参加聚会并送礼或收礼的问题。当n大于等于3时,求解不同情况的数量。解题思路包括特判特殊情况和利用组合数及二进制原理计算答案,模运算采用1e9+7。
摘要由CSDN通过智能技术生成

G: 聚会

摸底测试G题

题意:

有n个人,现在有一个聚会,每个人都可以选择参加或者不参加。而参加的人中每个人要么只去送礼物,要么只接受礼物。不存在全部都接受礼物或者全部都送礼物的情况(这样要么没人送礼物,要么没人接受礼物了)。问有多少中情况?

题解:

对于1个人和2个人先特判一下风别为1和3。
其实就是求组合数,对于n>=3时,每次去的人数必定要>=2,并且每个人有送和不送两两种情况求一个2的幂,然后再减去全送和全得2种情况,所以ans=∑C(k,n)*(2^k-2)其中3<=k<=n
然后在求组合数时,对于分母的两个阶层用其逆元表示即可。
这题的模为1e9+7,可以用费马小定理或是线性求阶乘逆元算

#include<iostream>
#include<cstdio>
#include<algorithm>
#define mod 1000000007
#define ll long long
#define M 100005
using namespace std;
ll fac[M];//阶乘
ll fac_inv[M];//阶乘的逆元
ll poww
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值