[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题卡线段树 求出每个右端点往 ...
随机推荐
- docker 部署mysql redis
先介绍利用的两个数据卷挂载的规则,这对于理解挂载mysql数据库存储非常有帮助. 如果挂载一个空的数据卷到容器中的一个非空目录中,那么这个目录下的文件会被复制到数据卷中. 如果挂载一个非空的数据卷到容 ...
- WorkFlow三:配BO对象,事件触发工作流
1.新建个BO对象的字段. 2.新建取数函数: 3.运行事物代码SWO1新建BO对象. 4.新建关键字段: 5.新建BO对象的事件: 6.添加处理方法: 6.调整对象状态,这里是本地对象,不需要释放, ...
- nginx之旅(第二篇):nginx日志管理、nginx防盗链、nginx虚拟主机
一.nginx日志管理 Nginx访问日志主要有两个参数控制 1) log_format #用来定义记录日志的格式(可以定义多种日志格式,取不不同名字即可) log_format log_name s ...
- 在知识爆炸的年代如何学习,避免成为PPT架构师
计算机的发展大体遵循摩尔定律,IT要学的东西越来越多,感觉无从下手 然后发现许多人,专门喜欢说这些名词概念装高大上,脱离一线开发,技术跟风盲目崇拜新的骚东西,比如docker,k8s,微服务,open ...
- JS数据打印的几种方式
/** * 在页面输出内容! */ document.write("This's Great!"); /** * 控制台打印: */ console.log("This ...
- nginx的 ngx.var ngx.ctx ngx.req
ngx.var 是获取 Nginx 的变量,需要经历字符串 hash.hash 表查找等过程. ngx.ctx 仅仅是一个 Lua table 而已,它的引用存放在 ngx_lua 的模块上下文(ct ...
- centos7 安装 ffmpeg
升级系统 yum install epel-release -yyum update -y 安装Nux Dextop Yum源 由于centos 没有官方软件包,我们可以使用第三方YUM源(Nux D ...
- Go Programming Language 3
[Go Programming Language 3] 1.These two statements declare a struct type called and a variable calle ...
- 2. 代理模式(C++)
1.介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问.这样实现了业务和核心功能分离. 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口.在某些情况下,一个对象不适合或者不能 ...
- CSS伪类选择器:is、not
本文介绍一下Css伪类:is和:not,并解释一下is.not.matches.any之前的关系 :not The :not() CSS pseudo-class represents element ...