【Atcoder】AGC 020 D - Min Max Repetition 二分+构造
【题意】定义f(A,B)为一个字符串,满足:
1.长度为A+B,含有A个‘A',B个'B'。
2.最长的相同字符子串最短。
3.在满足以上2条的情况下,字典序最小。
例如, f(2,3) = BABAB
, and f(6,4) = AABAABAABB
.
Q次询问f(Ai,Bi)的子串[Ci,Di]。
Q<=10^3,A,B<=5*10^8,D-C+1<=100,time=2s。
【算法】二分+构造
【题解】参考:Editorial
令k为最短的最长相同字符子串,显然k=max(A,B)/(min(A,B)+1)(上取整)。
考虑某个位置填入’A‘后合法,应满足:
1.当前连续A不超过k。
2.剩余的A’和B'构成的k(A',B')<=k(A,B)。
顺序扫描即可得到全串——部分分。
分析答案串的构造,前面应为A...ABA...ABA...A,直到某个位置p不满足B<=A*k为止。
此时位置p一定是‘A',且B-A*k<=k,后面就不得不排列成B...BAB...BAB...B。
二分位置p,输出c~d即可。
#include<cstdio>
#include<algorithm>
using namespace std;
int T,k,n,a,b,c,d;
int main(){
scanf("%d",&T);
while(T--){
scanf("%d%d%d%d",&a,&b,&c,&d);n=a+b;
int l=,r=n+,mid,A,B;k=(max(a,b)-)/(min(a,b)+)+;;
while(l<r){
mid=(l+r)>>;
A=a-mid/(k+)*k-mid%(k+);B=b-mid/(k+);
if(B<=1ll*A*k)l=mid+;else r=mid;
}
A=a-l/(k+)*k-l%(k+);B=b-l/(k+);r=l+B-A*k+;
for(int i=c;i<=min(d,l);i++)putchar(i%(k+)?'A':'B');
for(int i=max(c,l+);i<=d;i++)putchar((i-r)%(k+)?'B':'A');
puts("");
}
return ;
}//ONION_CYC QwQ
【Atcoder】AGC 020 D - Min Max Repetition 二分+构造的更多相关文章
- AtCoder Grand Contest 020 D - Min Max Repetition
q<=1000个询问,每次问a,b,c,d:f(a,b)表示含a个A,b个B的字符串中,连续A或连续B最小的串中,字典序最小的一个串,输出这个串的c到d位.a,b<=5e8,d-c+1&l ...
- 「AGC020D」 Min Max Repetition
「AGC020D」 Min Max Repetition 传送门 首先这个东西的连续字符个数你可以二分.但事实上没有必要,这是可以直接算出来的. 即 \(k=\max\{\lceil\frac{A}{ ...
- 在一定[min,max]区间,生成n个不重复的随机数的封装函数
引:生成一个[min,max]区间的一个随机数,随机数生成相关问题参考→链接 var ran=parseInt(Math.random()*(max-min+1)+min); //生成一个[min,m ...
- LINQ to SQL Count/Sum/Min/Max/Avg Join
public class Linq { MXSICEDataContext Db = new MXSICEDataContext(); // LINQ to SQL // Count/Sum/Min/ ...
- 2.10 用最少次数寻找数组中的最大值和最小值[find min max of array]
[本文链接] http://www.cnblogs.com/hellogiser/p/find-min-max-of-array.html [题目] 对于一个由N个整数组成的数组,需要比较多少次才能把 ...
- LINQ Count/Sum/Min/Max/Avg
参考:http://www.cnblogs.com/peida/archive/2008/08/11/1263384.html Count/Sum/Min/Max/Avg用于统计数据,比如统计一些数据 ...
- 【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题
http://www.cnblogs.com/cvbnm/articles/1947743.html 多年以前,Microsoft 幹了一件比 #define N 3 還要蠢的蠢事,那就是在 < ...
- LINQ to SQL 语句(3) 之 Count/Sum/Min/Max/Avg
LINQ to SQL 语句(3) 之 Count/Sum/Min/Max/Avg [1] Count/Sum 讲解 [2] Min 讲解 [3] Max 讲解 [4] Average 和 Agg ...
- [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg
在讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ ...
随机推荐
- 0512 SCRUM团队项目3.0
题目 SCRUM 流程的步骤2: Spring 计划 1. 确保product backlog井然有序.(参考示例图1) 2. Sprint周期,一个冲刺周期,长度定为两周,本学期还有三个冲刺周期. ...
- 栈和队列在python中的实现
栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 PS:stack和queue是不能通过查询具体某一个位置的元素而进行操作的.但是他们的排列 ...
- inotify 工具 是一种强大的、细粒度的、异步文件系统监控机制
前言:Inotify是一种强大的.细粒度的.异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性.读写属性.权限属性.删除创建.移动等操作,也就是可以监控文件发生的一切变化. ...
- 解决Max retries exceeded with url的问题
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='itunes.apple.com', port=443): Max ret ...
- C语言文法阅读与理解
<翻译单元>--><外部声明>--><函数定义>|<申报> <函数定义>--><声明说明符>-->< ...
- 201621123037 《Java学习设计》 第五周学习总结
Week05-继承.多态.抽象类与接口 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键词:接口."has-a".多态.comparable.Compa ...
- 开源人脸识别face_recognition
环境:python36 1.安装dlib.face_recognition windows版 下载dlib,cp后面是py版本 下载地址:https://pypi.org/simple/dlib/ 提 ...
- 【hdu5306】Gorgeous Sequence 线段树区间最值操作
题目描述 给你一个序列,支持三种操作: $0\ x\ y\ t$ :将 $[x,y]$ 内大于 $t$ 的数变为 $t$ :$1\ x\ y$ :求 $[x,y]$ 内所有数的最大值:$2\ x\ y ...
- 【Java】时间转json格式化
@DateTimeFormat(pattern="yyyy-MM-ddHH:mm:ss") @JsonFormat(pattern="yyyy-MM-ddHH: ...
- (转)修改Android 的framework层后,重新编译
1.下面方法适合真机:下载android源码,然后编译你修改的framwork的代码,会生成framework.jar,然后push到system/framework目录下,重启机器!ok 2,下面方 ...