#codeforces 1546D - AquaMoon and Chess 题解
时间:2021-07-12
本文章向大家介绍#codeforces 1546D - AquaMoon and Chess 题解,主要包括#codeforces 1546D - AquaMoon and Chess 题解使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
原题链接``
思路:
显然如果有连续偶数个“1”,那么这些一可以拆成若干组“11”自由移动。
因此有了思考方向,用捆绑法,以2个“1”一组。
那么,如果有连续奇数个“1”该怎么办?
经过操作观察,我们发现,多出来的“1”我们其不需要理它,去掉一个“1”将剩下的偶数个“1”按上述分组,将这些组和0排列后,原来多处来的一个“1”是唯一确定的
因此。我们记录0的个数cnt0,记录组数g
答案为从cnt0 + g 个数中 取出g个数的方案数
代码:
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const ll mod = 998244353;
ll t;
ll n;
ll cnt0;
ll cnt1;
ll g;
ll ans;
string s;
ll f[100010];
ll fin[100010];
ll qpow(ll x, ll y) {
ll ret = 1ll;
while (y) {
if (y & 1) ret = (ret * x) % mod;
x = (x * x) % mod;
y >>= 1;
}
return ret % mod;
}
ll inv(ll x) {
return qpow(x, mod - 2);
}
void init() {
f[0] = fin[0] = 1ll;
for (ll i = 1; i <= 100000; i++) {
f[i] = (i * f[i - 1]) % mod;
fin[i] = (fin[i - 1] * inv(i)) % mod;
}
}
int main() {
ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
init();
cin >> t;
while (t--) {
cnt0 = cnt1 = g = 0;
cin >> n;
cin >> s;
for (int i = 0; i < s.length(); i++) {
if (s[i] == '1') {
if (i == s.length() - 1) {
cnt1 ++;
g += cnt1 / 2;
}
else {
cnt1 ++;
}
}
else {
cnt0 ++;
g += cnt1 / 2;
cnt1 = 0;
}
}
ans = ((f[cnt0 + g] * fin[g]) % mod * fin[cnt0]) % mod;
cout << ans << "\n";
}
return 0;
}
原文地址:https://www.cnblogs.com/Leins/p/15003849.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- codeforces 1296D(贪心)
- codeforces 1399D
- JSP开发之JSTL介绍和使用
- codeforces 1283E(贪心)
- codeforces1216C (矩形面积交)
- codeforces 1234C(思维)
- codeforces 1405B(思维)
- codeforces 1216D(数学)
- codeforces 1256D(优先队列+贪心)
- codeforces 1343D(差分数组)
- codeforces1385D (递归+分治)
- codeforces1294D(思维+暴力)
- codeforces 1367D(思维)
- 数据库事务处理与资源池
- codeforces 1328D(思维)