一道组合意义题
CF961G Partitions
题意:自己看。懒得写了。
在深切感受到一个压根不接受核的人找一个核狗要日推的痛苦之后我看到了这个东西。
首先看见这种数数题直接翻一下题解看代码长度,发现第一篇人畜无害的正常推式子题代码长度于是放心推。
然后我们可以列出来这么一个人畜无害的式子:
球球了我真的很不想在大晚上的时候还要写一车注解。直接把后边系数扒出来。
所以系数就是
完事。特判
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
const int mod=1000000007;
int n,k,ans,sum,jc[200010],inv[200010];
int qpow(int a,int b){
int ans=1;
while(b){
if(b&1)ans=1ll*ans*a%mod;
a=1ll*a*a%mod;
b>>=1;
}
return ans;
}
int main(){
scanf("%d%d",&n,&k);jc[0]=inv[0]=1;
for(int i=1;i<=n;i++)jc[i]=1ll*jc[i-1]*i%mod;
inv[n]=qpow(jc[n],mod-2);
for(int i=n-1;i>=1;i--)inv[i]=1ll*inv[i+1]*(i+1)%mod;
for(int i=1;i<=n;i++){
int x;scanf("%d",&x);sum=(sum+x)%mod;
}
if(n==1&&k==1){
printf("%d\n",sum);return 0;
}
for(int j=0;j<k;j++){
ans=(ans+1ll*((k-j&1)?1:mod-1)*inv[k-j-1]%mod*inv[j]%mod*(n+j)%mod*qpow(j+1,n-2))%mod;
}
ans=1ll*ans*sum%mod;
printf("%d\n",ans);
return 0;
}
然而没有完全完。
看了看题解发现了标题的玄妙。
首先我们这个东西可以变成这所有的分组方案中共有多少元素和
拆一下是和上边一坨一样的东西。
快踩
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通