CF1759C Thermostat

原题链接(https://codeforces.com/contest/1759/problem/D)

题意简述

共t组输入
每组输入五个整数l,r,x,a,b(l<=a,b<=r)
对于a的操作,可从a变成c,但要保证|c-a|>=x,并且l<=c<=r
问从a到b的最少操作步数为多少,若不能到b则输出-1

分析

1,a=b,步数为0
2,|a-b|>=x,直接a到b,步数为1
3,当 a 能直接到左边界l,且l能直接到 b 时,或当 a 能直接到尤右边界r,且r能直接到 b 时,步数为2
4,当 a 能到左右边界的任意一个,且 b 也能到左右边界的任意一个时,步数为 3

AC代码

点击查看代码
    int l,r,x,a,b;
    cin >> l >> r >> x >> a >> b;
    
    if(a==b){cout << 0 << endl; return ;}
    
    int ans=abs(a-b);
    if(ans>=x && b>=l && b<=r){cout << 1 << endl; return ;}
    
    if((a+x>r && a-x<l) || (b+x>r && b-x<l)){cout << -1 << endl; return ;}
    
    if((abs(a-l)>=x && abs(b-l)>=x) || (abs(a-r)>=x && abs(b-r)>=x)){cout << 2 << endl; return ;}
    cout << 3 << endl;
posted @ 2023-05-09 18:17  酒巷清风&  阅读(19)  评论(0)    收藏  举报