【题意】定义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 二分+构造的更多相关文章

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

  2. 「AGC020D」 Min Max Repetition

    「AGC020D」 Min Max Repetition 传送门 首先这个东西的连续字符个数你可以二分.但事实上没有必要,这是可以直接算出来的. 即 \(k=\max\{\lceil\frac{A}{ ...

  3. 在一定[min,max]区间,生成n个不重复的随机数的封装函数

    引:生成一个[min,max]区间的一个随机数,随机数生成相关问题参考→链接 var ran=parseInt(Math.random()*(max-min+1)+min); //生成一个[min,m ...

  4. LINQ to SQL Count/Sum/Min/Max/Avg Join

    public class Linq { MXSICEDataContext Db = new MXSICEDataContext(); // LINQ to SQL // Count/Sum/Min/ ...

  5. 2.10 用最少次数寻找数组中的最大值和最小值[find min max of array]

    [本文链接] http://www.cnblogs.com/hellogiser/p/find-min-max-of-array.html [题目] 对于一个由N个整数组成的数组,需要比较多少次才能把 ...

  6. LINQ Count/Sum/Min/Max/Avg

    参考:http://www.cnblogs.com/peida/archive/2008/08/11/1263384.html Count/Sum/Min/Max/Avg用于统计数据,比如统计一些数据 ...

  7. 【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题

    http://www.cnblogs.com/cvbnm/articles/1947743.html 多年以前,Microsoft 幹了一件比 #define N 3 還要蠢的蠢事,那就是在 < ...

  8. 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 ...

  9. [转]LINQ语句之Select/Distinct和Count/Sum/Min/Max/Avg

    在讲述了LINQ,顺便说了一下Where操作,这篇开始我们继续说LINQ语句,目的让大家从语句的角度了解LINQ,LINQ包括LINQ to Objects.LINQ to DataSets.LINQ ...

随机推荐

  1. 0512 SCRUM团队项目3.0

    题目 SCRUM 流程的步骤2: Spring 计划 1. 确保product backlog井然有序.(参考示例图1) 2. Sprint周期,一个冲刺周期,长度定为两周,本学期还有三个冲刺周期. ...

  2. 栈和队列在python中的实现

    栈和队列是两种基本的数据结构,同为容器类型.两者根本的区别在于: stack:后进先出 queue:先进先出 PS:stack和queue是不能通过查询具体某一个位置的元素而进行操作的.但是他们的排列 ...

  3. inotify 工具 是一种强大的、细粒度的、异步文件系统监控机制

    前言:Inotify是一种强大的.细粒度的.异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性.读写属性.权限属性.删除创建.移动等操作,也就是可以监控文件发生的一切变化. ...

  4. 解决Max retries exceeded with url的问题

    requests.exceptions.ConnectionError: HTTPSConnectionPool(host='itunes.apple.com', port=443): Max ret ...

  5. C语言文法阅读与理解

    <翻译单元>--><外部声明>--><函数定义>|<申报> <函数定义>--><声明说明符>-->< ...

  6. 201621123037 《Java学习设计》 第五周学习总结

    Week05-继承.多态.抽象类与接口 1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键词:接口."has-a".多态.comparable.Compa ...

  7. 开源人脸识别face_recognition

    环境:python36 1.安装dlib.face_recognition windows版 下载dlib,cp后面是py版本 下载地址:https://pypi.org/simple/dlib/ 提 ...

  8. 【hdu5306】Gorgeous Sequence 线段树区间最值操作

    题目描述 给你一个序列,支持三种操作: $0\ x\ y\ t$ :将 $[x,y]$ 内大于 $t$ 的数变为 $t$ :$1\ x\ y$ :求 $[x,y]$ 内所有数的最大值:$2\ x\ y ...

  9. 【Java】时间转json格式化

     @DateTimeFormat(pattern="yyyy-MM-ddHH:mm:ss")     @JsonFormat(pattern="yyyy-MM-ddHH: ...

  10. (转)修改Android 的framework层后,重新编译

    1.下面方法适合真机:下载android源码,然后编译你修改的framwork的代码,会生成framework.jar,然后push到system/framework目录下,重启机器!ok 2,下面方 ...