题目大意

把所有仅包含\(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的更多相关文章

  1. 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( ...

  2. [New!!!]欢迎大佬光临本蒟蒻的博客(2019.11.27更新)

    更新于2019.12.22 本蒟蒻在博客园安家啦!!! 本蒟蒻的博客园主页 为更好管理博客,本蒟蒻从今天开始,正式转入博客园. 因为一些原因,我的CSDN博客将彻底不会使用!!!(带来不便,敬请谅解) ...

  3. 2019.11.9 csp-s 考前模拟

    2019.11.9 csp-s 考前模拟 是自闭少女lz /lb(泪奔 T1 我可能(呸,一定是唯一一个把这个题写炸了的人 题外话: 我可能是一个面向数据编程选手 作为一个唯一一个写炸T1的人,成功通 ...

  4. 【LOJ】#3030. 「JOISC 2019 Day1」考试

    LOJ#3030. 「JOISC 2019 Day1」考试 看起来求一个奇怪图形(两条和坐标轴平行的线被切掉了一个角)内包括的点个数 too naive! 首先熟练的转化求不被这个图形包含的个数 -- ...

  5. Spring5最新完整教程IDEA版【通俗易懂2019.11月】

    1.Maven找包: spring-webmvc spring-jdbc 2.Spring的本质是控制反转,依靠依赖注入来实现.以一个servcie对象为例,即是service暴露注入接口(构造,se ...

  6. LuoguP7106 双生独白 题解

    Content 给定一个 十六进制颜色码(一个长度为 \(7\) 的字符串,意义详见题面),请输出其反色的十六进制颜色码. 数据范围:颜色的 R,G,B 值保证在 \(255\) 以内. Soluti ...

  7. 2019.11.11 洛谷月赛t3

    题目背景 由于Y校的老师非常毒瘤,要求\(zhouwc\)在\(csp\)考前最后\(3\)天参加期中考,\(zhouwc\)非常生气,决定消极考试,以涂完卡但全错为目标.现在\(retcarizy\ ...

  8. ArchLinux 2019.11.01安装流程--安装基本系统

    安装前的一些话 本文是参考官方文档ArchLinux的Installation guide(简体中文)加实际操作编写的. 有啥都好说,转载时请注明作者,这是基本素质,也是法律要求 安装是在虚拟机上进行 ...

  9. 6424. 【NOIP2019模拟2019.11.13】我的订书机之恋

    题目描述 Description Input Output Sample Input 见下载 Sample Output 见下载 Data Constraint 题解 lj题卡线段树 求出每个右端点往 ...

随机推荐

  1. TP5.0整合webuploader实现多图片上传功能

    在https://github.com/fex-team/webuploader 下载webuploader并解压,解压后放到public里面.其中我把解压缩后的文件夹改名为webuploader,放 ...

  2. Linux的DNS正向解析部署

    前面介绍了DNS的作用及其相关的结果.Linux服务之DNS介绍 下面开始有关DNS的服务部署.<DNS正向解析示例> 工具:虚拟机 centos7 配置:Linux   IP 192.1 ...

  3. vuex中mapGetters的使用及简单实现原理

    一.项目中的mapGetters在Vue项目的开发过程中必然会使用到vuex,对vue项目公用数据进行管理,从而解决组件之间数据相互通信的问题,如果不使用vuex,那么一些非父子组件之间的数据通信将会 ...

  4. ArcGIS 10 线转点 polyline to points

    核心提示,使用Construct Points工具,在编辑里,选中一条polyline,然后编辑工具栏里的Construct Points.图等有空再补上吧.

  5. 201671010402-陈靖 实验十四 团队项目评审&课程学习总结

    项目 内容 任课教师博客主页链接 https://www.cnblogs.com/nwnu-daizh/ 作业要求链接地址 https://www.cnblogs.com/nwnu-daizh/p/1 ...

  6. CentOS7.5 上使用 bundle 文件安装 MySQL8.0 MySQL5.0

    CentOS7.5 上使用 bundle 文件安装 MySQL8.0 MySQL5.0 CentOS7.5 环境 [root@instance-fjii60o3 ~]# rpm -qi centos- ...

  7. history.back(-1)和history.go(-1)的区别 (有错误)

    返回一个页面方法有很多,就好比给返回按钮绑定一个URL,但是如果一个页面可以从很多页面到达,那么这个页面返回的页面就不是固定的,那么绑定固定的URL显然不妥. 两个方法的区别 既然history.ba ...

  8. 【Mybatis】拼接表名

  9. flask静态文件

    Flask 静态文件 Web应用程序通常需要静态文件,例如javascript文件或支持网页显示的CSS文件.通常,配置Web服务器并为您提供这些服务,但在开发过程中,这些文件是从您的包或模块旁边的s ...

  10. django -- ORM查询

    前戏 在我们之前操作ORM中,你也许是启动Django项目,通过地址访问固定的函数,或者在pycharm里的python console里执行,第一种比较麻烦,而且每次都要启动项目,写路由,第二种虽然 ...