q<=1000个询问,每次问a,b,c,d:f(a,b)表示含a个A,b个B的字符串中,连续A或连续B最小的串中,字典序最小的一个串,输出这个串的c到d位。a,b<=5e8,d-c+1<=100。

首先可以确定这个“连续A或连续B的最小值”是:$\left \lceil \frac{p}{q+1} \right \rceil$

然后就尽可能在前面放A,如果放A导致后面不满足这个“连续A或连续B的最小值”,就放B,这样是O(n)的。

打几个表发现:串实际上是前面:AA……ABAA……ABAA……ABAA……这样的,后面是BABB……BABB……BABB,这样的,那二分一下这个分界的位置,判断按前缀那样放A,B之后后缀能否满足“连续A或连续B的最小值”。然后根据c,d在这个位置前后分下类输出答案即可。

 #include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<math.h>
//#include<assert.h>
#include<algorithm>
//#include<iostream>
//#include<bitset>
using namespace std; int q,a,b,c,d,len; int calc(int a,int b)
{
if (!a || !b) return a^b;
if (a<b) a^=b,b^=a,a^=b;
return (a-)/(b+)+;
} bool check(int x)
{
int cnta=x/(len+)*len+x%(len+),cntb=x/(len+)-(x%(len+)==);
if (cnta>a) return ;
return calc(a-cnta,b-cntb)<=len;
} void workleft(int left,int right)
{
for (int i=left;i<=right;i++)
{
if (i%(len+)==) putchar('B');
else putchar('A');
}
}
void workright(int left,int right)
{
for (int i=left;i<=right;i++)
{
if ((a+b-i+)%(len+)==) putchar('A');
else putchar('B');
}
} int main()
{
scanf("%d",&q);
while (q--)
{
scanf("%d%d%d%d",&a,&b,&c,&d);
len=calc(a,b);
int L=,R=a+b;
while (L<R)
{
int mid=(L+R+)>>;
if (check(mid)) L=mid;
else R=mid-;
}
int pos=L;
if (d<=pos) workleft(c,d);
else if (c>pos) workright(c,d);
else workleft(c,pos),workright(pos+,d);
puts("");
}
return ;
}

最新文章

  1. 《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)
  2. links and softwares
  3. GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样?
  4. [CentOS]yum安装postgres和ntfs-3g
  5. *[codility]Country network
  6. 学习块格式化上下文(BlockFormattingContext)
  7. Oracle删除多张表
  8. Spring AspectJ的Execution表达式-备忘笔记
  9. 每天一个linux命令(33)--df命令
  10. java环境配置,试用和基本数据结构
  11. Jquery EasyUI datagrid 的一些问题
  12. linux常用的内核镜像格式
  13. 使用 ZipArchive 生成Zip文件备注
  14. Java框架spring 学习笔记(十三):log4j介绍
  15. [EXP]ThinkPHP 5.0.23/5.1.31 - Remote Code Execution
  16. jQuery同步Ajax带来的UI线程阻塞问题
  17. C# 进制转换(二进制、十六进制、十进制互转)
  18. 弹幕和回到顶部前端web
  19. WPF EventAggregator(基于EventAggregator的事件发布及订阅)
  20. 【转】nodeJs学习之项目结构

热门文章

  1. Python 相关疑问
  2. C#_JDBC连接数据库
  3. UWP Windows10开发更新磁贴和动态更新磁贴
  4. Java文件上传(基础性)
  5. 2.3点击菜单显示div再点击就隐藏
  6. java 线程池第一篇 之 ThreadPoolExcutor
  7. MySQL学习随笔--视图
  8. [转]c++应用程序文件的编译过程
  9. Android图像处理之Bitmap类(1)
  10. Chrome插件:浏览器后台与页面间通信