A
做题时思路没有那么清晰
这道题的思路是:
- 答案不能大于n-1
- 当答案小于n-1时,我们总可以交换来增大距离
因此答案为min(n-1,|a-b|+x)
代码如下:
int main(){
int t;
cin>>t;
while(t--){
int n,x,a,b;
cin>>n>>x>>a>>b;
if(a>b){
int t=a;
a=b;
b=t;
}
int sum=b-a;
for(int i=1;i<=x;i++){
if(sum==n-1){
break;
}
sum++;
}
cout<<sum<<endl;
}
}
B
这道题的思路是:
1不能转换
2可转换为1或3
3可转换为2
若x=1,y必须为1;
若x=2或3,y必须小于4;
若x>3,我们可以把它转换为无限大,因此y都可行
int main(){
int t;
cin>>t;
while(t--){
bool flag=true;
ll x,y;
cin>>x>>y;
while(x<y){
if(x%2==1){
x--;
}
x=x/2*3;
if(x>=y){
break;
}
if(x==2||x==0||x==3){
flag=false;
break;
}
}
if(flag==true)cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
}