[SOJ #687]双生串(2019-11-6考试)/[hdu5431]AB String
题目大意
把所有仅包含\(AB\)的字符串按字典序排列,给你一个仅包含\(AB\)的字符串\(S\),然后有\(Q\)个问题,第\(i\)个问题给你\(k_i\),求不是\(S\)的子串中,第\(k_i\)小的是什么。\(T\)组数据
\(T\leqslant5\),\(\sum|S_i|\leqslant2.3\times10^5\),\(Q_i\leqslant10\),\(k_i\leqslant10^9\)
题解
发现,长度为\(l\)的字符串有\(2^l\)个,而\(S\)的长度小于等于\(l\)的子串最多有\(l|S|\)个,可以发现,当\(l>31\)时\(2^l-l|S|>10^9\),即答案长度一定小于等于\(31\)。因为字符串中只含有\(AB\),可以用二进制表示,用\(\mathrm{hash}\)算出\(S\)中每种长度的子串。这样可以算出最终的答案的长度,然后在这一个长度中二分即可。
卡点
多测一定要清空!!
C++ Code:
#include <cstdio>
#include <iostream>
#include <algorithm>
int T, n, Q, k, p;
int s[32][250000], cnt[32];
std::string __s;
bool check(int mid, int p) {
return mid + 1 -
(std::upper_bound(s[p], s[p] + cnt[p], mid) - s[p]) >= k;
}
int main() {
std::ios::sync_with_stdio(false), std::cin.tie(0), std::cout.tie(0);
std::cin >> T;
while (T --> 0) {
std::cin >> __s, n = __s.length();
for (int i = 1; i <= 31 && i <= n; ++i) {
const int I = (1 << i) - 1; s[i][0] = 0;
for (int j = 0; j < i; ++j) s[i][0] = s[i][0] << 1 | __s[j] - 'A';
for (int j = i; j < n; ++j)
s[i][j - i + 1] = (s[i][j - i] << 1 | __s[j] - 'A') & I;
std::sort(s[i], s[i] + n - i + 1);
cnt[i] = std::unique(s[i], s[i] + n - i + 1) - s[i];
}
std::cin >> Q;
while (Q --> 0) {
std::cin >> k;
for (p = 1; p <= 31; ++p)
if ((1 << p) - cnt[p] < k) k -= (1 << p) - cnt[p];
else break;
int l = 0, r = (1 << p) - 1, ans = -1;
while (l <= r) {
int mid = l + r >> 1;
if (check(mid, p)) ans = mid, r = mid - 1;
else l = mid + 1;
}
for (int i = p - 1; ~i; --i) std::cout << "AB"[ans >> i & 1];
std::cout.put('\n');
}
for (int i = 1; i <= 31; ++i) cnt[i] = 0;
}
return 0;
}
[SOJ #687]双生串(2019-11-6考试)/[hdu5431]AB String的更多相关文章
- EOJ Monthly 2019.11 E. 数学题(莫比乌斯反演+杜教筛+拉格朗日插值)
传送门 题意: 统计\(k\)元组个数\((a_1,a_2,\cdots,a_n),1\leq a_i\leq n\)使得\(gcd(a_1,a_2,\cdots,a_k,n)=1\). 定义\(f( ...
- [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)
更新于2019.12.22 本蒟蒻在博客园安家啦!!! 本蒟蒻的博客园主页 为更好管理博客,本蒟蒻从今天开始,正式转入博客园. 因为一些原因,我的CSDN博客将彻底不会使用!!!(带来不便,敬请谅解) ...
- 2019.11.9 csp-s 考前模拟
2019.11.9 csp-s 考前模拟 是自闭少女lz /lb(泪奔 T1 我可能(呸,一定是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通 ...
- 【LOJ】#3030. 「JOISC 2019 Day1」考试
LOJ#3030. 「JOISC 2019 Day1」考试 看起来求一个奇怪图形(两条和坐标轴平行的线被切掉了一个角)内包括的点个数 too naive! 首先熟练的转化求不被这个图形包含的个数 -- ...
- Spring5最新完整教程IDEA版【通俗易懂2019.11月】
1.Maven找包: spring-webmvc spring-jdbc 2.Spring的本质是控制反转,依靠依赖注入来实现.以一个servcie对象为例,即是service暴露注入接口(构造,se ...
- LuoguP7106 双生独白 题解
Content 给定一个 十六进制颜色码(一个长度为 \(7\) 的字符串,意义详见题面),请输出其反色的十六进制颜色码. 数据范围:颜色的 R,G,B 值保证在 \(255\) 以内. Soluti ...
- 2019.11.11 洛谷月赛t3
题目背景 由于Y校的老师非常毒瘤,要求\(zhouwc\)在\(csp\)考前最后\(3\)天参加期中考,\(zhouwc\)非常生气,决定消极考试,以涂完卡但全错为目标.现在\(retcarizy\ ...
- ArchLinux 2019.11.01安装流程--安装基本系统
安装前的一些话 本文是参考官方文档ArchLinux的Installation guide(简体中文)加实际操作编写的. 有啥都好说,转载时请注明作者,这是基本素质,也是法律要求 安装是在虚拟机上进行 ...
- 6424. 【NOIP2019模拟2019.11.13】我的订书机之恋
题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往 ...
随机推荐
- 设置注释 idea
https://blog.csdn.net/weixin_42679529/article/details/81059598 groovyScript("def result=''; def ...
- NSQ端口关系以及注意事项
0.相关参考文章: 官网:https://nsq.io/ <golang实战-nsq集群入门与坑> <nsq系统架构> <NSQ消息队列> 1.启动命令 ①nsql ...
- 静态资源上传至远程ftp服务器,ftp工具类封装
工具类,是一个单独的工程项目 提取必要信息至ftp.properties配置文件中 ftp_host=192.168.110.128 ftp_port=21 ftp_username=ftpuser ...
- django orm 基于双下划线的跨表查询
一..基于双下划线的跨表查询(join实现) key:正向查询按字段,反向查询按表明小写 1.一对多跨表查询 查询在跨表中可以有两种方式,正向查询就是关键字段在你要搜索的表,没有关键字段就是反向查询 ...
- url路由
注意: url(r'^index/', views.index) 第一个index是提交跳转的网址 (可修改) 第二个是自定义的方法 url(r'^index666/', views.ind ...
- Selenium请求库
阅读目录 一 介绍 二 安装 三 基本使用 四 等待元素被加载 五 选择器 六 元素交互操作 七 其他 八 项目练习 九 破解登录验证 一 介绍 1.selenium是什么? selenium最初是一 ...
- React和Redux的开发经验之谈
1.显示控制用state,共享数据用redux,觉得可以不用redux的就不要用 2.表单项集中的地方,推荐用高阶组件,单个表单项,不推荐用高阶组件 3.涉及对服务数据的处理,在redux的model ...
- 使用Python3进行AES加密和解密 输入的数据
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准.这个标准用来替代原先的DES, ...
- ZROI 暑期高端峰会 A班 Day2 线性代数
高斯消元 很普及组,不讲了 当主元没有逆的时候可以辗转相除. 如果也没有带余数除法--没救了 逆矩阵 我们定义矩阵 \(A\) 的逆矩阵为 \(A^{-1}\),满足 \(AA^{-1}=A^{-1} ...
- 第08组 Beta冲刺(5/5)
队名:955 组长博客:点这里! 作业博客:点这里! 组员情况 组员1(组长):庄锡荣 过去两天完成了哪些任务 文字/口头描述 部署新服务器 展示GitHub当日代码/文档签入记录 接下来的计划 准备 ...