Educational Codeforces Round 160 (Rated for Div. 2)
A
直接模拟,注意细节
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll p[15] = {1};
void solve() {
ll x;
cin >> x;
int len = 0;
while(x / p[len + 1]) ++ len;
for(int i = 1; i <= len; ++ i) {
ll a = x / p[i];
ll b = x % p[i];
if(b >= p[i - 1] && b > a) {
return cout << a << ' ' << b << '\n', void();
}
}
cout << "-1\n";
}
int main() {
for(int i = 1; i <= 10; ++ i) p[i] = p[i - 1] * 10;
int T;
cin >> T;
while(T --) solve();
return 0;
}
B
一道很直观的贪心,用总共的0和1去构造答案,一旦失败,输出答案
void solve() {
string s;
cin >> s;
int cnt[2] = {0, 0};
for(auto ch : s) cnt[1] += ch == '1', cnt[0] += ch == '0';
for(int i = 0; i < s.length(); ++ i) {
if(s[i] == '0') {
if(-- cnt[1] < 0) return cout << s.length() - i << '\n', void();
}
else if(-- cnt[0] < 0) {
return cout << s.length() - i << '\n', void();
}
}
cout << "0\n";
}
C
开一个\(f\)数组统计某一位出现的次数
注意第\(i\)位能被两个\(i - 1\)位合成
检验时从低到高位遍历,同时计算\(f\)数组内部低位对高位的贡献
#include<bits/stdc++.h>
using namespace std;
int f[40], g[40];
bool check(int x) {
memcpy(g, f, sizeof f);
for(int i = 0; i <= 30; ++ i) {
if(x >> i & 1) {
if(g[i]) {
g[i + 1] += (g[i] - 1) / 2;
}
else return 0;
}
else g[i + 1] += g[i] / 2;
}
return 1;
}
int main() {
ios :: sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr);
int m;
cin >> m;
while(m --) {
int op, x;
cin >> op >> x;
if(op == 1) ++ f[x];
else {
cout << (check(x) ? "YES" : "NO") << '\n';
}
}
return 0;
}
D. Array Collapse
考虑分治。
设 \(f[l, r]\) 为区间 \([l, r]\) 能够通过操作得到的子序列数。
设 \([l, r]\) 内最小元素的下标为 \(p\)。
如果只考虑 \([l, r]\) 内部的所有情况,因为无论怎么操作 \(a[p]\) 都无法被删除,所以有 \(f[l][r] = f[l][p - 1] \cdot f[p + 1][r]\)。
考虑外部元素对 \(f[l][r]\) 的贡献。
显然,任意一个比 \(a[p]\) 大的数都不能使 \([l,r]\) 内有新的子序列出现。
如果 \(\exists i < l\),\(a[i] < a[p]\),那么我们可以把 \([l,p]\) 删掉,剩下 \([p + 1, r]\),新贡献为 \(f[p + 1][r]\)。
如果 \(\exists j > r\),\(a[j] < a[p]\),那么我们可以把 \([p,r]\) 删掉,剩下 \([l, p - 1]\),新贡献为 \(f[l][p - 1]\)。
如果上述 \(i,j\) 都存在,我们发现两者重复计算了 \([l,r]\) 全部删掉的方案,则 \(f[l][r]\) 减一。
考虑递归边界。
如果 \(l > r\),只存在空集这一种方案。
如果 \(l = r\) 且左右两边至少有一个小于 \(a[l]\) 的元素,则有 \(\phi\) 和 \(a[l]\) 两种,否则只有 \(a[l]\) 一种。
code
其中 \(f[i][j]\) 存的是 \([i, i + (1 << j) - 1]\) 内最小元素的位置。
\(L\_less\) 表示左边是否存在比区间最小值小的元素,\(R\_less\) 表示右边是否存在比区间最小值小的元素。
void init() {
for(int i = 1; i <= n; ++ i) f[i][0] = i;
for(int j = 1; j < 20; ++ j) {
for(int i = 1; i + (1 << j) - 1 <= n; ++ i) {
if(a[f[i][j - 1]] < a[f[i + (1 << j - 1)][j - 1]]) f[i][j] = f[i][j - 1];
else f[i][j] = f[i + (1 << j - 1)][j - 1];
}
}
}
int get_pos(int l, int r) {
int len = log2l(r - l + 1);
if(a[f[l][len]] < a[f[r - (1 << len) + 1][len]]) return f[l][len];
else return f[r - (1 << len) + 1][len];
}
ll get_val(int l, int r, bool L_less, bool R_less) {
if(l > r) return 1;
if(l == r && (L_less || R_less)) return 2;
if(l == r) return 1;
int p = get_pos(l, r);
ll left = get_val(l, p - 1, L_less, true);
ll right = get_val(p + 1, r, true, R_less);
ll ret = left * right % P;
if(L_less) ret += right;
if(R_less) ret += left;
if(L_less && R_less) -- ret;
return (ret % P + P) % P;
}
void solve() {
cin >> n;
for(int i = 1; i <= n; ++ i) cin >> a[i];
init();
cout << get_val(1, n, 0, 0) << '\n';
}
Educational Codeforces Round 160 (Rated for Div. 2)的更多相关文章
- Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship
Problem Educational Codeforces Round 60 (Rated for Div. 2) - C. Magic Ship Time Limit: 2000 mSec P ...
- Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems(动态规划+矩阵快速幂)
Problem Educational Codeforces Round 60 (Rated for Div. 2) - D. Magic Gems Time Limit: 3000 mSec P ...
- Educational Codeforces Round 43 (Rated for Div. 2)
Educational Codeforces Round 43 (Rated for Div. 2) https://codeforces.com/contest/976 A #include< ...
- Educational Codeforces Round 35 (Rated for Div. 2)
Educational Codeforces Round 35 (Rated for Div. 2) https://codeforces.com/contest/911 A 模拟 #include& ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings 题目连接: http://cod ...
- Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes 题目连接: http://code ...
- Educational Codeforces Round 63 (Rated for Div. 2) 题解
Educational Codeforces Round 63 (Rated for Div. 2)题解 题目链接 A. Reverse a Substring 给出一个字符串,现在可以对这个字符串进 ...
- Educational Codeforces Round 39 (Rated for Div. 2) G
Educational Codeforces Round 39 (Rated for Div. 2) G 题意: 给一个序列\(a_i(1 <= a_i <= 10^{9}),2 < ...
- Educational Codeforces Round 48 (Rated for Div. 2) CD题解
Educational Codeforces Round 48 (Rated for Div. 2) C. Vasya And The Mushrooms 题目链接:https://codeforce ...
- Educational Codeforces Round 60 (Rated for Div. 2) 题解
Educational Codeforces Round 60 (Rated for Div. 2) 题目链接:https://codeforces.com/contest/1117 A. Best ...
随机推荐
- nginx root 和 alias 的区别
区别: alias 含有rewrite的意思,可以重写掉不存在的路径.( nginx rewrite请看这里) 比如正常访问的地址是: http://ip:port 当我想让 http://ip:po ...
- LOTO示波器的变长存储深度和分段存储
LOTO示波器的变长存储深度和分段存储 经常有客户咨询和不理解LOTO示波器的存储深度为什么是变长的,也表示对LOTO示波器的分段存储功能不理解,本文对LOTO示波器的存储机制做一次完整的梳理,帮助我 ...
- KingbaseES 控制文件损坏的恢复
sys_ control文件损坏: 需要手工指定一些参数完成sys_resetwal相关操作 当前数据库信息 test=# \d 关联列表 架构模式 | 名称 | 类型 | 拥有者 --------- ...
- 算法学习笔记【6】| KMP 算法
KMP(Knuth-Morris-Pratt字符串查找算法) KMP 算法是可以快速在文本串 s 中找到模式串 a 的算法. Part 1:幼稚的算法 首先思考我们在暴力匹配模式串时的思路: < ...
- 配置腾讯云轻量级linux服务器用到的资源和步骤
pasv_address=82.157.112.34 #请修改为您的 Linux 云服务器公网 IPsftp://82.157.112.34:21 ①下载系统可视化https://cloud.tenc ...
- 电科院密码保密与信息安全竞赛网络攻防宣传赛 Writeup
一. 战队信息 战队名称:20221214 战队排名:1 二. 解题过程 ctf1 用Winhex打开,最后有一串编码字符,拿去一把梭即可. ctf2 目录穿越 GET /icons/.%2e/%2e ...
- #循环节,gcd#JZOJ 5362 密码
题目 询问一个排列\(A\)是否能够通过\(A_i=A_{A_i}\)得到, 同时还要满足给定的两个数通过加减或者交换能够得到已知的两个数 分析 下面的就是要保证\(\gcd\)相同,但是还有上面的操 ...
- 使用site-maven-plugin在github上搭建公有仓库
目录 简介 前期准备 在maven中配置GitHub权限 配置deploy-plugin 配置site-maven-plugin 怎么使用这个共享的项目 总结 简介 Maven是我们在开发java程序 ...
- Wasm软件生态系统安全分析
演讲嘉宾 | 王浩宇 回顾整理 | 廖 涛 排版校对 | 李萍萍 嘉宾简介 王浩宇,华中科技大学教授,博士生导师,华中科技大学OpenHarmony技术俱乐部主任.研究关注于新兴软件系统中的安全. ...
- Python拷贝、移动、重命名、删除文件和文件夹----shutil
拷贝 # 拷贝文件import shutil # 语法: shutil.copy(src, dst) '''示例 将 a 文件夹中的 a.txt 拷贝到 b 文件夹 ''' shutil.copy(' ...