Language: C++

#include<bits/stdc++.h>
using namespace std;
vector<int> split(int x,int n) {
	vector<int> v(n+1,0);
	for(;x;) {
		if (x>=n) {
			for(int i=1;i<=n;i++) v[i]++;
			x-=n;
		} else if (v[1]==0) {
			for(int i=1;i<=x;i++) v[i]++;
			x=0;
		} else {
			for(int i=n;i>=n-x+1;i--) v[i]++;
			x=0;
		}
	}
	return v;
}
pair<bool,string> check(int a,int b,int m,int x) {
	vector<int> v,v1;
	v=split(b,m);
	v1=split(a,m);
//	for(int i=1;i<(int)v1.size();i++) cerr<<v1[i]<<" ";cerr<<endl;
	reverse(v1.begin()+1,v1.end());
	bool flag=true;
	string s="";
//	cerr<<m<<"  :  ";
	for(int i=1;i<=m;i++) {
//		cerr<<v1[i]<<" "<<v[i]<<" ";
		while (v1[i]--) s+='A';
		while (v[i]--) s+='B';
	}
	for(int i=0;i<a+b;i++) {
		int j=i;
		while (j+1<a+b&&s[j+1]==s[j]) j++;
		if (j-i+1>x) {
			flag=false;break;
		}
	}
	return {flag,s};
}
string solve(int a,int b) {

	int n,x,y;
	string s="",sa="",sb="";
	n=ceil(max(a,b)*1.0/(min(a,b)+1));
	//cout<<n<<endl; 
	x=min(b*1.0,ceil((3.0*a-b)/8));
	y=min(a*1.0,ceil((3.0*b-a)/8));
	//cout<<x<<" "<<y<<endl;
	if (x<0) x=0;
	if (y<0) y=0;
	for (int i=0;i<n;i++){
		sa=sa+'A';
		sb=sb+'B';
	}
	sa=sa+'B';
	sb='A'+sb; 
	//cout<<sa<<" "<<sb<<endl;
	//拼接起始A..AB 
	for(int i=0;i<x;i++){
		s=s+sa;
	}
	
	if (n>1){
		//拼接中间A 
		for(int i=0;i<a-n*x-y;i++){
			s=s+'A';
		}
		//拼接中间B 
		for(int i=0;i<b-x-n*y;i++){
			s=s+'B';
		}
	}
	
	//拼接末尾AB..B 
	for(int i=0;i<y;i++){
		s=s+sb;
	}
		
	if(n==1){
		if(a-n*x-y==1) s=s+'A';
		if(b-x-n*y==1) s='B'+s;
	} 
	return s;
	
}
string ans(int a,int b,int c,int d) {
	return solve(a,b).substr(c-1,d-c+1);
}
int q,c,d;
long long a,b;
string sa,sb,s;
int main() {
	
	scanf("%d",&q);
	while (q--) {
		scanf("%ld%ld%d%d",&a,&b,&c,&d);
	int n,m,x,y,x1,y1;
	s="",sa="",sb="";
	n=ceil(max(a,b)*1.0/(min(a,b)+1));
	m=d-c+1;
	//cout<<n<<endl; 
	
	if(n!=1){
		x=min(b,(n*a-b)/(n*n-1));
		y=min(a,(n*b-a)/(n*n-1));
		//cout<<x<<" "<<y<<endl;
		if (x<0) x=0;
		if (y<0) y=0;
		
		x1=a-n*x-y;
		y1=b-n*y-x;
		
		int remc=c%(n+1),devc=(c-1)/(n+1)+1;
		int remd=d%(n+1),devd=(d-1)/(n+1)+1;
		
		
		if(m>=n+1){
			//所求长度超过一个自然段 
			sa=string(n,'A')+'B';
			sb='A'+string(n,'B');
			
			//d在第一个分段内 
			if(d<=(n+1)*x){
				
				for(int i=0;i<devd-devc+1;i++) s+=sa; 
				c=c%(n+1);
				d=c+m-1;
				
			}else{
				//c在第三分段内 
				if(c>(n+1)*x+x1+y1){
					for(int i=0;i<(m+1)/(n+1);i++) s+=sb;
					c=(c-(n+1)*x-x1-y1)%(n+1);
					d=c+m-1;
					//cout<<s<<endl;
				}else{
					for(int i=0;i<ceil(m*1.0/(n+1));i++) s+=sa;
					s+=string(x1,'A')+string(y1,'B');				 
					for(int i=0;i<ceil(m*1.0/(n+1));i++) s+=sb;
					c=c-(x-ceil(m*1.0/(n+1)))*(n+1);
					d=c+m-1;
					//cout<<s<<endl;
					//cout<<c<<" "<<d<<endl;
				}
				
				
			}			
		}else{
			//所求长度在一个自然段内 
			if(d<=(n+1)*x){
				//在第一个分段内 
				if(s[d]=='B'){
					s=string(d-c,'A')+'B';
				}else{
					if(c/(n+1)==d/(n+1)){
						s=string(d-c+1,'A');	
					}else{
						s=string(d/(n+1)*(n+1)-c,'A')+'B'+string(d-d/(n+1)*(n+1),'A')
					}					
				}				
				c=1;
				d=c+m-1;
			}else{
							
				if(c<=(n+1)*x){
					s=string((n+1)*x-c,'A')+'B';
				}				
				s+=string(x1,'A')+string(y1,'B');
				if(d>(n+1)*x+x1+y1){
					s+='A'+string(d-(n+1)*x-x1-y1-1,'B');
				}				
				d=d-c+1;
				c=1;
			}
		}
		//cout<<c<<" "<<d<<endl;
		printf("%s\n",s.substr(c-1,d-c+1).c_str());
		
	}else{
		//n=1例外处理 		
		if(a>=b) {
			if((c % 2)==1){
				for (int i=0;i<(d-c+1)/2;i++){
					s+="AB";
				}
				if((d-c+1) % 2==1) s+='A';				
			}else{
				for (int i=0;i<(d-c+1)/2;i++){
					s+="BA";	
				}
				if((d-c+1) % 2==1) s+='B';
			}	
		}
		if(a<b){
			if((c % 2)==1){
				for (int i=0;i<(d-c+1)/2;i++){
					s+="BA";
				}
				if((d-c+1) % 2==1) s+='B';				
			}else{
				for (int i=0;i<(d-c+1)/2;i++){
					s+="AB";	
				}
				if((d-c+1) % 2==1) s+='A';
			}	
		}
		cout<<s<<endl;		
	} 
	
	
		//cout<<s.substr(c-1,d-c+1)<<endl;
		//printf("%s\n",s.substr(c-1,d-c+1).c_str());
		
		//for(int i=c-1;i<d;i++){
			//putchar(s[i]);
			
		//}
		//printf("\n");
		
	}
	return 0;
}

Compiler output:
a.cc: In function 'int main()':
a.cc:160:110: error: expected ';' before '}' token
  160 |                                                 s=string(d/(n+1)*(n+1)-c,'A')+'B'+string(d-d/(n+1)*(n+1),'A')
      |                                                                                                              ^
      |                                                                                                              ;
  161 |                                         }
      |                                         ~