声明一下:模拟赛6题太太太太难了,况且也没时间考,只好发题解了。
题解报告:
(1) 第一题:间隔就坐(place)
重点:分类讨论。
题意:给定一个长度为 n 的01串,1表示已经有人在此就坐并开始就餐,0表示无人就坐。 为最大化就餐人数,你需要在保证隔位就坐的前提下尽可能多的安排座位。 请你计算一下有多少种方案满足要求。
题解:当中间存在若干段 0 时,满足乘法原理,将每一段对答案方案数的贡献相乘即可注意,若存在两个相邻的 1 ,则答案应为1,再将最前和最后特判一下即可。
#include <bits/stdc++.h>
using namespace std;
const int mod=998244353;
char s[300005];
int main() {
int n;
scanf("%d",&n);
scanf("%s",s+1);
long long ans=1;
int pre=-1;
for(int i=1;i<=n;i++) {
if(s[i]=='1'){
int sum=i-pre-1;
if(sum%2==0&&sum>2){
ans=(ans*sum/2)%mod;
}
pre=i;
}
}
int sum=n+2-pre-1;
if(sum%2==0&&sum!=2) {
ans=(ans*sum/2)%mod;
}
printf("%lld\n",ans);
return 0;
}
(2) 第二题:三角形(geometry)
重点:找规律。