题解:P12291 [蓝桥杯 2024 国 Java A] 粉刷匠小蓝
题目传送门
思路
首先
根据题目,题目说:那么它右侧(第
这个序列是粉刷顺序,所以这个序列要满足:对于每个数
至此已经想到了
但想拿满分,就要考虑构造。
既然要满足要求,我们考虑从
例如
| T | F | T | F | T |
|---|
填入最小数
以此类推,依次填入剩下的数。
求一共有多少种不同的合法序列。
那,有
由于
Code
#include<bits/stdc++.h>
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define endl '\n'
//#define int long long
using namespace std;
const int mod=1e9+7;//模数
int n;
signed main(void){
IOS;
cin>>n;
int k=0;//1的个数
for(int i=1;i<=n;i++)
{
int x;
cin>>x;
k+=x;//x只会为1或0。如果x为1,则k加1,如果为0,1的个数不会增加,所以不用写判断
}
int ans=1;//初始值k=0、k=1或k=2的值
for(int i=3;i<=k;i++){
ans=(1ll*ans*((i+1)/2))%mod;//记得 *1ll 不然会爆int,会WA
}
cout<<ans<<endl;//输出答案
return 0;
}
闲话
我与QinYulang师出同门,他用的是看着用暴力跑出来的一到十的答案找规律,我用的是老师的思路改编了一下,我记得老师的思路有一大部分不一样。