[AGC020D] Min Max Repetition
牛子题
优先满足第二个条件,长度是 \(\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的更多相关文章
- 「AGC020D」 Min Max Repetition
		
「AGC020D」 Min Max Repetition 传送门 首先这个东西的连续字符个数你可以二分.但事实上没有必要,这是可以直接算出来的. 即 \(k=\max\{\lceil\frac{A}{ ...
 - 【Atcoder】AGC 020 D - Min Max Repetition 二分+构造
		
[题意]定义f(A,B)为一个字符串,满足: 1.长度为A+B,含有A个‘A',B个'B'. 2.最长的相同字符子串最短. 3.在满足以上2条的情况下,字典序最小. 例如, f(2,3) = BABA ...
 - 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 ...
 - 在一定[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 ...
 
随机推荐
- k8s对接Ceph实现持久化存储(16)
			
一.Ceph简介 官网:https://ceph.com/en/ https://docs.ceph.com/en/latest/start/intro/ ceph 是一种开源的分布式的存储系统 包含 ...
 - 一个随时更新的js库
			
1.src同级建commFunction=>timer.js 2.main.js引入 import time from '../commonFunction/time' Vue.prototyp ...
 - sqli-labs-master 第二,三,四关
			
第二关: 判断注入类型:http://192.168.65.130/sqli-labs-master/Less-2/?id=1 --+ 原因:$sql="SELECT * FROM user ...
 - git checkout 命令图文详解
			
目录 git checkout branchname (切换本地分支) 切换远程分支 放弃修改 git checkout . git checkout – filename git checkout ...
 - C语言:++ --优先级的深入理解
			
#include <stdio.h> int main() { int num = 11; int result = ++num > 11 && --num < ...
 - AIRIOT答疑第5期|如何使用低代码业务流引擎?
			
推拉拽! AIRIOT平台业务流引擎可创建丰富的业务流程,实现从流程定义.数据处理.任务工单.消息通知.日志追踪的闭环流转.多类型节点任意组合,可视化流程日志,精准追踪流程流转.人工任务统一管理,审批 ...
 - 推荐几款卓越的 .NET 开源搜索组件
			
前言 在当今日益数据化的世界中,信息的检索和搜索功能对于各种应用来说变得至关重要. 无论是电子商务网站.企业资源规划系统.还是内容管理系统,高效的搜索功能都是提升用户体验.促进业务发展的关键. 因此, ...
 - wpf 斗地主 单机版  没有机器人出牌算法
			
斗地主的游戏流程实现了,剩余的音效和机器人的出牌算法,抓地主算法就用最简单的实现. 主要实现了各种牌组的组合,牌组的大小比较,总共有16种牌组 基础牌组 单张.炸弹.炸弹型飞机带对子.炸弹型飞机什么都 ...
 - 【asp.net】滑块验证码(分享一个从github上下载的源码)
			
思路: 1. 准备好10张或20张不同规格的图片,按规格分类到不同文件夹,每个文件夹的图片从1开始顺序递增命名,为了随机选择图片. 2.前端提交规格比如200*300,根据规格选择原图,并初始化 ...
 - Redis 的简单介绍
			
Redis 特点 单线程 执行过程按顺序执行,不会同时执行多个操作,保证操作的原子性,省去了很多上下文切换线程的时间,不必考虑资源竞争和可能出现死锁. 为什么使用单线程 ? 官方FAQ表示:因为 Re ...