杂题选讲I
MUH and Cube Walls CF471D
由于序列同时加 \(x\),该序列的差分数组不变,所以求出 \(a,b\) 的差分数组跑 kmp 或哈希。
书柜
题目描述:
有 \(A,B\) 两种书排成的序列,序列长度为 \(n\),两种书高度分别为 \(h_A,h_B\),\(q\) 次询问每次给定一段区间,你需要移除一些书使得剩下的书严格递增,求剩下的书的最多数量。
\(n\le 5\times 10^6\),\(q \le 5\times 10^5\),空间限制 \(128\) MB。
发现若 \(h_A < h_B\),询问区间内有子序列 \(AB\) 则答案为 \(2\) 否则为 \(1\),反之亦然,所以若 \(a_i\) 为 \(A\) 则维护前面 \(B\) 出现位置的最大值记为 \(p0_i\),\(a_i\) 为 \(B\) 同理,查询时求对应最大值是否大于区间左端点即可。
注意:最大值用树状数组维护,用线段树、ST表等数据结构会被卡空,树状数组建树要 \(O(n)\) 不然会被卡时,查询 \(O(\log^2 n)\) 就行。
// author : yhy
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using Pii = pair<int, int>;
const int kMaxN = 5e6 + 5;
string s;
int n, q, ha, hb, pre[2] = {int(-1e9), int(-1e9)}, c[2][kMaxN], t[2][kMaxN];
int query(int l, int r, int ty) {
int res = 0;
for (; r >= l;) {
r - (r & -r) + 1 >= l ? res = max(res, c[ty][r]), r = r - (r & -r) :
res = max(res, t[ty][r--]);
}
return res;
}
signed main() {
cin.tie(0)->ios::sync_with_stdio(0);
cin >> n >> q >> ha >> hb >> s, s = ' ' + s;
for (int i = 1; i <= n; i++) {
t[0][i] = (s[i] == 'A' ? pre[1] : -1e18);
t[1][i] = (s[i] == 'B' ? pre[0] : -1e18);
s[i] == 'A' && (pre[0] = i);
s[i] == 'B' && (pre[1] = i);
}
for (int ty = 0; ty <= 1; ty++) {
for (int i = 1; i <= n; i++) {
c[ty][i] = max(c[ty][i], t[ty][i]);
int j = i + (i & -i);
j <= n && (c[ty][j] = max(c[ty][j], c[ty][i]));
}
}
for (int l, r; q--;) {
cin >> l >> r;
if (ha > hb) {
cout << (query(l, r, 0) >= l ? 2 : 1) << '\n';
} else if (ha < hb) {
cout << (query(l, r, 1) >= l ? 2 : 1) << '\n';
} else {
cout << "1\n";
}
}
return 0;
}
Equation AT_arc158_d
对于任意三元组 \((x,y,z)\),一定有一个数 \(t\) 满足:
\]
因为左式可以除右式,那么有:
\]
所以 \((\frac{x}{t},\frac{y}{t},\frac{z}{t})\) 就是一组合法的解,不断随机 \(x,y,z\),如果 \(x \ne y \ne z\) 且左式右式的值均不为 \(0\) 就输出答案。
Teleporting Takahashi AT_abc240_g
先考虑一维情况,假设从 \(0\) 点走到 \(x\) 点,总共能走 \(n\) 步,\(a\) 步向前,\(b\) 步向后,很容易列出方程:
a+b=n\\a-b=x
\end{cases}
\]
易得 \(a=\frac{n+x}{2},b=\frac{n-x}{2}\),那么方案数就为为 \(C_n^a\),注意若 \(n<x\) 或 \(\frac{n+x}{2}\mod2=1\),则无解。
再考虑二维情况,将坐标系旋转 \(45^\circ\),坐标 \((x,y)\) 就变成了 \((x+y,y-x)\),此时移动增量变成了 \((+1,+1),(+1,-1),(-1,+1),(-1,-1)\) 两维互不干涉,那么问题就变为了两个一维的问题相乘即可。
扩展到三维,由于 \(-10^7 \le z \le 10^7\), 枚举第三维往上走几步往下走几步,减去步数就变成了二维问题。
// author : yhy
#include <bits/stdc++.h>
using namespace std;
using LL = long long;
using Pii = pair<LL, LL>;
const LL kMaxN = 1e7 + 5, M = 998244353;
LL n, x, y, z, fac[kMaxN], inv[kMaxN];
LL qpow (LL a, LL n) {
LL r = 1, w = a;
for (LL i = 1; i <= n; i <<= 1) {
n & i && (r = r * w % M);
w = w * w % M;
}
return r;
}
LL C(LL x, LL y) {
return fac[x] * inv[x - y] % M * inv[y] % M;
}
LL solve(LL k, LL tx, LL ty) {
LL a = abs(tx - ty), b = abs(tx + ty);
if ((k - a) % 2 == 1 || (k +- b) % 2 == 1 || k < a || k < b) {
return 0;
}
return C(k, (k - a) / 2) * C(k, (k - b) / 2) % M;
}
signed main() {
cin >> n >> x >> y >> z, x = abs(x), y = abs(y), z = abs(z);
fac[0] = inv[0] = 1;
for (LL i = 1; i <= 1e7; i++) {
fac[i] = fac[i - 1] * i % M;
inv[i] = inv[i - 1] * qpow(i, M - 2) % M;
}
LL ans = 0;
for (LL i = 0, j = x; i + j <= n; i++, j++) {
ans = (ans + C(n, i) * C(n - i, j) % M * solve(n - i - j, y, z) % M) % M;
}
cout << ans;
return 0;
}
杂题选讲I的更多相关文章
- 正睿OI DAY3 杂题选讲
正睿OI DAY3 杂题选讲 CodeChef MSTONES n个点,可以构造7条直线使得每个点都在直线上,找到一条直线使得上面的点最多 随机化算法,check到答案的概率为\(1/49\) \(n ...
- 2019暑期金华集训 Day6 杂题选讲
自闭集训 Day6 杂题选讲 CF round 469 E 发现一个数不可能取两次,因为1,1不如1,2. 发现不可能选一个数的正负,因为1,-1不如1,-2. hihoCoder挑战赛29 D 设\ ...
- ZROI 暑期高端峰会 A班 Day5 杂题选讲
CF469E \(n\) 个需要表示的数,请使用最少的 \(2^k\) 或 \(-2^k\) 表示出所有需要表示的数.输出方案. \(n\le 10^5,|a_i|\le 10^5\). 首先每个数肯 ...
- hs-black 杂题选讲
[POI2011]OKR-Periodicity 考虑递归地构造,设 \(\text{solve(s)}\) 表示字典序最小的,\(\text{border}\) 集合和 \(S\) 的 \(\tex ...
- ZROI 19.08.02 杂题选讲
给出\(n\)个数,用最少的\(2^k\)或\(-2^{k}\),使得能拼出所有数,输出方案.\(n,|a_i|\leq 10^5\). 显然一个绝对值最多选一次.这个性质非常强. 如果所有都是偶数, ...
- p_b_p_b 杂题选讲
[ARC119F] AtCoder Express 3 [ARC117F] Gateau 考虑二分答案,对前缀和建差分约束 \(\text{check}\) ,但是用 \(\text{spfa}\) ...
- namespace_std 杂题选讲
CF1458C Latin Square 2021 EC Final C. Random Shuffle [THUPC2021] 混乱邪恶 [JOISC2022] 制作团子 3 2022 集训队互测 ...
- 贪心/构造/DP 杂题选做Ⅱ
由于换了台电脑,而我的贪心 & 构造能力依然很拉跨,所以决定再开一个坑( 前传: 贪心/构造/DP 杂题选做 u1s1 我预感还有Ⅲ(欸,这不是我在多项式Ⅱ中说过的原话吗) 24. P5912 ...
- 贪心/构造/DP 杂题选做Ⅲ
颓!颓!颓!(bushi 前传: 贪心/构造/DP 杂题选做 贪心/构造/DP 杂题选做Ⅱ 51. CF758E Broken Tree 讲个笑话,这道题是 11.3 模拟赛的 T2,模拟赛里那道题的 ...
- PJ考试可能会用到的数学思维题选讲-自学教程-自学笔记
PJ考试可能会用到的数学思维题选讲 by Pleiades_Antares 是学弟学妹的讲义--然后一部分题目是我弄的一部分来源于洛谷用户@ 普及组的一些数学思维题,所以可能有点菜咯别怪我 OI中的数 ...
随机推荐
- hot100之哈希
两数之和(001) 先看代码 class Solution { HashMap<Integer, Integer> map = new HashMap<>(); public ...
- 4.Java SDK源码分析系列笔记-LinkedList
目录 1. 是什么 2. 如何使用 3. 原理分析 3.1. uml 3.2. 构造方法 3.3. add方法 3.3.1. 确保容量足够容纳新的元素 3.3.2. 把元素放入数组最后一个位置 3.4 ...
- MySQL核心知识学习之路(1)
作为一个后端工程师,想必没有人没用过数据库,跟我一起复习一下MySQL吧,本文是我学习<MySQL实战45讲>的总结笔记的第一篇,总结了MySQL的基础架构.一个查询语句的执行过程 以及 ...
- css 给Input 左侧添加图标
background-image: url(../Content/Pc/img/IC_search.png); background-repeat: no-repeat; background-pos ...
- [ThingsBoard] 2. 在源码上运行
一.前言 本文基于 ThingsBoard 4.0.2 编写,对应提交Version set to 4.0.2(01c5ba7d37006e1f8a3492afbb3c67d017ca8dd3). 由 ...
- centos8.2安装jenkins
前言 前几天双十一,因为是腾讯云的新用户,就在它家买了个服务器. 想着以前一直想搞一个jenkins,但由于买的阿里云服务器配置低,就一直没搞,这下好了,拿它连连手. 安装jenkins必须依赖的ja ...
- 不支持tpm2.0 升级windows11
前提 我计划给我的macbook pro2020装双系统 但是双击启动转换助理 看到只能装windows10,只好手动选择下载好的win11镜像,则提示驱动软件失败TMDDD 那我就先用启动转换助理安 ...
- 比特位计数 leetcode 338
简介 问题的答案就在问题之中 问题说不允许使用 如 C++ 中的 __builtin_popcount 那么我们知道了可以用的为什么不去试试呢? 参考连接 https://leetcode-cn.co ...
- printf \r \n
简介 \r 回到这一行的开始处 \n 换下一行 参考链接 csdn
- P9713 「QFOI R1」抱抱 题解
P9713 「QFOI R1」抱抱 题解 Sol 前置知识:长方体体积公式:\(V = abh\). 我们知道,切割掉 \(x \le k\) 的部分就是把 \(a\) 减去 \(k\),切割掉 \( ...