题解 朝鲜时蔬

传送门

组合数骗了40pts,考场上再见到建议打表找规律

扔几个觉得比较有用的变换吧
image
这个可以推广到方程数更多的情况,可以搭配爆搜求出所有解

关于一个数的拆分方案数:
(这里枚举里 \(a_1+a_2\) 的和)
image
image

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;
}
posted @ 2021-10-07 19:58  Administrator-09  阅读(8)  评论(0编辑  收藏  举报