啥意思
by Curators @ 2022-01-20 23:34:46
@[CHENHX](/user/239407) 具体说说咋容斥?
by FxorG @ 2022-01-21 00:10:58
@[CHENHX](/user/239407) 和生成函数算出来的是一样的啊,没有本质区别(
by Aleph1022 @ 2022-01-21 06:56:31
@[FxorG](/user/125901) 大力展开生成函数的过程和容斥本质上一致吧
by Aleph1022 @ 2022-01-21 07:00:05
@[GuidingStar](/user/75840) 但是好像就是错了,而且我还打了两遍答案都是一样的,或许您能帮忙看看
```cpp
#include <cstdio>
#include <cctype>
#include <cstring>
#define int long long
using namespace std;
inline int read(){
int x=0,f=1;char ch=getchar();
while(!isdigit(ch))f^=ch=='-',ch=getchar();
while(isdigit(ch))x=x*10+(ch^48),ch=getchar();
return f?x:-x;
}
const int N=15,mo=2004;
int n,m[N],a,b,cnt[4096],fac=1;
int Cm(int n,int m){
if(n<m)return 0;
int ret=1,div[15];
memset(div,0,sizeof(div));
for(int i=n;i>n-m;--i){
int x=i;
for(int j=1;j<=m;++j){
if(div[j])continue;
if((x%j)==0){
x/=j;
div[j]=true;
}
}
ret=ret*x%mo;
}
return ret;
}
int fk(int x){
if(x&1)return -1;
else return 1;
}
int calc(int x){
int ret=0;
for(int i=0;i<(1<<n);++i){
int rest=x;
for(int j=1,p=i;p;p>>=1,++j){
if(p&1)rest-=m[j]+1;
}
ret=(ret+fk(cnt[i])*Cm(rest+n-1,n-1)%mo)%mo;
}
return (ret%mo+mo)%mo;
}
signed main(){
n=read(),a=read(),b=read();
for(int i=1;i<=n;++i)m[i]=read(),fac*=i;
m[++n]=1e9;fac*=n;
for(int i=1;i<(1<<n);++i){
cnt[i]=cnt[i>>1]+(i&1);
}
printf("%lld\n%lld\n",calc(b),calc(a-1));
int ans=calc(b)-calc(a-1);
printf("%lld",(ans+mo)%mo);
}
```
by chen_hx @ 2022-01-21 07:48:44
容斥可以。不懂为什么不行。
by Saliеri @ 2022-06-08 16:51:25
可以。我做的容斥https://www.luogu.com.cn/record/78220696
by xkai @ 2022-07-01 20:09:52
@[CHENHX](/user/239407) 可以容斥
[code](https://www.luogu.com.cn/paste/zed89z43)
~~但是我傻逼忘了 n<=10 贺了一份 exlucas~~
by Blowback @ 2023-04-13 11:21:16