【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 ...
随机推荐
- 【acm】杀人游戏(hdu2211)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2211 杀人游戏 Time Limit: 3000/1000 MS (Java/Others) M ...
- (五)Jmeter中的属性和变量
一.Jmeter中的属性: 1.JMeter属性统一定义在jmeter.properties文件中,我们可以在该文件中添加自定义的属性 2.JMeter属性在测试脚本的任何地方都是可见的(全局),通常 ...
- Linux的压缩/解压缩文件处理 zip & unzip
Linux的压缩/解压缩命令详解及实例 压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip 另:有些服 ...
- [C/C++] 虚函数机制
转自:c++ 虚函数的实现机制:笔记 1.c++实现多态的方法 其实很多人都知道,虚函数在c++中的实现机制就是用虚表和虚指针,但是具体是怎样的呢?从more effecive c++其中一篇文章里面 ...
- python之enumerate()学习
X = 'abcdefghijklmn' for (index,char) in enumerate(X): print (index, char) 利用enumerate()函数,可以在每次循环中同 ...
- Hadoop RPC protocol description--转
原文地址:https://spotify.github.io/snakebite/hadoop_rpc.html Snakebite currently implements the followin ...
- SQL 临时表或表变量替代游标(转)
1.如果表没有自动增长的标识列(int) 使用临时表 SELECT IDENTITY(int) NewID ,.. INTO #tmp FROM YouTable 2.表有标识列 使用表变量 INSE ...
- java中初始化块、静态初始化块和构造方法
(所谓的初始化方法init()是另一回事, 在构造方法之后执行, 注意不要混淆) 在Java中,有两种初始化块:静态初始化块和非静态初始化块.它们都是定义在类中,用大括号{}括起来,静态代码块在大括号 ...
- 【BZOJ4152】The Captain(最短路)
[BZOJ4152]The Captain(最短路) 题面 BZOJ Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求 ...
- c++常量详解
概念 常量是存放固定且不可变值的,一旦确定初始值则在程序其它地方不可改变, 所以const对象必须初始化.常量一般使用const关键字来修饰. const 对象可以大致分为三类: 1. const i ...