题解 朝鲜时蔬
组合数骗了40pts,考场上再见到建议打表找规律
扔几个觉得比较有用的变换吧
这个可以推广到方程数更多的情况,可以搭配爆搜求出所有解
关于一个数的拆分方案数:
(这里枚举里 \(a_1+a_2\) 的和)
Code:
#include <bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
#define N 100010
#define ll long long
#define int long long
char buf[1<<21], *p1=buf, *p2=buf;
#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf, 1, 1<<21, stdin)), p1==p2?EOF:*p1++)
inline int read() {
int ans=0, f=1; char c=getchar();
while (!isdigit(c)) {if (f=='-') f=-f; c=getchar();}
while (isdigit(c)) {ans=(ans<<3)+(ans<<1)+(c^48); c=getchar();}
return ans*f;
}
int n, m, k;
int inv[N];
const ll mod=1e9+7;
signed main()
{
freopen("vegetable.in", "r", stdin);
freopen("vegetable.out", "w", stdout);
random_device(seed);
srand(seed());
n=read()%mod; m=read(); k=read();
inv[0]=inv[1]=1;
for (int i=2; i<=100; ++i) inv[i]=(mod-mod/i)*inv[mod%i]%mod;
if (m==1 && k==1) cout<<n<<endl;
else if (m==2 && k==2) cout<<n*(n-1)%mod*inv[2]%mod<<endl;
else if (m==3 && k==3) cout<<n*(n-1)%mod*(n-2)%mod*inv[6]%mod<<endl;
else if (m==4 && k==4) cout<<n*(n-1)%mod*(n-2)%mod*(n-3)%mod*inv[24]%mod<<endl;
else cout<<1ll*rand()*rand()%mod<<endl;
return 0;
}