牛子题

优先满足第二个条件,长度是 \(\lceil \frac{max(A,B)}{min(A,B)+1}\rceil\) ,那么现在要满足字典序最小,发现先填 \(A..ABA..ABA..AB..\) ,中途可能 \(B>>A\) 就填不满 ,就要改变策略,变成 \(B..BAB..BA...\) 这样子的,但是注意可能 \(B\) 有余数,那我肯定优先把有余数个 \(B\) ,这样子肯定字典序小一点,然后二分两种方式的分界点, \(check\) 的话直接判断 \(shengB\times len \leq shengA\) 就行了

关于 \(check\) 的写法,为什么这样是对的?先考虑普通情况,正确性显然,但是如果 \(shengB \times len = shengA\) ,说明没有余数,那就是先填 \(A\) ,那万一之前最后一个也是 \(A\) , 就会寄掉,但是其实我们可以调整一下,把最后的 \(B\) 调整一个过来,把第二段的 \(A\) 给第一段,就是合法的了,本质上是分界点向右移动了,所以对于这种情况要返回 \(true\) 才行,不然答案会错

然后注意二分要像下面的代码那么写才不会错

#include<bits/stdc++.h>
#define il inline
#define int long long
using namespace std;
il int read(){
char c;int x=0,f=0;
while(!isdigit(c=getchar()))f|=(c=='-');
while(isdigit(c))x=(x*10)+(c^48),c=getchar();
return f?-x:x;
}
int A,B,C,D,len;
il bool check(int fjd){
int shengA=A-fjd/(len+1)*len-fjd%(len+1),shengB=B-fjd/(len+1);
return shengA*len>=shengB;
}
signed main(){
int t=read();
while(t--){
A=read(),B=read(),C=read(),D=read();
len=ceil(max(A,B)*1.0/(min(A,B)+1));
int lt=0,rt=A+B+1,pos=0;
while(lt<rt){
int mid=(lt+rt)>>1;
if(check(mid))lt=mid+1;
else rt=mid;
}
pos=lt;
int shengA=A-pos/(len+1)*len-pos%(len+1),shengB=B-pos/(len+1);
int fstA=shengB-shengA*len+pos+1;
for(int i=C;i<=D;i++){
if(i<=pos){
if(i%(len+1))putchar('A');
else putchar('B');
}
else if(i>pos&&i<fstA)putchar('B');
else if(i>=fstA){
if((i-fstA+1)%(len+1)==1)putchar('A');
else putchar('B');
}
}
puts("");
}
return 0;
}

[AGC020D] Min Max Repetition的更多相关文章

  1. 「AGC020D」 Min Max Repetition

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

  2. 【Atcoder】AGC 020 D - Min Max Repetition 二分+构造

    [题意]定义f(A,B)为一个字符串,满足: 1.长度为A+B,含有A个‘A',B个'B'. 2.最长的相同字符子串最短. 3.在满足以上2条的情况下,字典序最小. 例如, f(2,3) = BABA ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 从零开始写 Docker(十二)---实现 mydocker stop 停止容器

    本文为从零开始写 Docker 系列第十二篇,实现类似 docker stop 的功能,使得我们能够停止指定容器. 完整代码见:https://github.com/lixd/mydocker 欢迎 ...

  2. k8s网页访问实战

    流程: 客户端访问--->ingress七层代理---->service四层代理---->deployment 详细情况:https://www.cnblogs.com/yangme ...

  3. Multisim仿真验证之二极管的特性参数

    二极管的特性 正向 R1 10% 20% 30% 50% 70% 90% Vd/mV 299 543 583 608 627 658 Id/mA 0.01 0.1 0.6 1.4 2.8 7.2 rd ...

  4. MinDoc 编译安装(linux环境)

    目录 MinDoc 简介 项目地址: 下面以 Linux 系统为例: Gomod方式安装 下载项目代码到本地 写入依赖 下载依赖 创建数据库 配置数据库 编译main.go 提升文件权限 初使化数据库 ...

  5. ansible系列(21)--ansible的变量注册Register

    1. 变量注册Register register 关键字可以将某个 task 任务结果存储至变量中,最后使用 debug模块 输出变量内容,可以用于后续排障: 示例一:register的基本使用: # ...

  6. 一次glide内存泄漏排查分析

    glide是一款非常优秀的图片加载框架,目前很多项目在使用.提供了非常方法,在此,笔者就不一一列举了,可以到官网查找. 目前项目在做内存排查,因为是车机项目,之前开发的时候没有注意内存方面的问题(车机 ...

  7. java学习之旅(day.13)

    常用类 Object类 object类是所有类的父类,所有类直接或间接继承object类 所有类,如果没书写extends显示继承某个类,都默认继承object类 getClass()方法 返回值是c ...

  8. 【漏洞复现】用友NC uapjs RCE漏洞(CNVD-C-2023-76801)

    产品介绍 用友NC是一款企业级ERP软件.作为一种信息化管理工具,用友NC提供了一系列业务管理模块,包括财务会计.采购管理.销售管理.物料管理.生产计划和人力资源管理等,帮助企业实现数字化转型和高效管 ...

  9. C#的GroupBy方法是如何工作的

    前言:先贴结果 GroupBy方法是如何工作的? 一.准备6个待分组的学生对象 class student { public string name;//姓名 public int grade;//年 ...

  10. 更改wsl中系统的安装位置

    wsl默认安装位置是C盘,众所周知C盘总是不够用的,所以才有了把wsl的系统迁移到其它位置的需求.官网文档 首先查看所有分发版本 wsl -l --all -v 导出分发版为tar文件到D盘 wsl ...