【水题合集|Codeforces A. Distance and Axis (思维 / 暴力) (Round #665 Div.2)】传送门
题意: 在坐标轴OA上找到一个点B,使得| |OA| - |OB| | == k。若无法等于k,就将A向左后右移动一个单位,试问最少经过多少次操作可以找到符合条件的B点。
文章图片
思路:
- 简单粗暴点,可直接先将B点放在原点位置。
- 若 |OA| == k,那么可以直接选择原点(或二倍A点的位置)为B,操作数为0。
- 若 |OA| < k,那么将A加到k即可。
- 若 |OA| > k,就需要在OA间安插B点的操作数比较少,且若 n-k为奇数,还需要将A向右移动一步即可。
#include
#define endl '\n'
#define null NULL
#define ll long long
#define int long long
#define pii pair
#define lowbit(x) (x &(-x))
#define ls(x) x<<1
#define rs(x) (x<<1+1)
#define me(ar) memset(ar, 0, sizeof ar)
#define mem(ar,num) memset(ar, num, sizeof ar)
#define rp(i, n) for(int i = 0, i < n;
i ++)
#define rep(i, a, n) for(int i = a;
i <= n;
i ++)
#define pre(i, n, a) for(int i = n;
i >= a;
i --)
#define IOS ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
const int way[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
using namespace std;
const intinf = 0x7fffffff;
const double PI = acos(-1.0);
const double eps = 1e-6;
const llmod = 1e9 + 7;
const intN = 2e5 + 5;
int t, n, k;
signed main()
{
IOS;
cin >> t;
while(t --){
cin >> n >> k;
if(n == k) cout << 0 << endl;
else if(n < k) cout << k-n << endl;
else{
if((n-k)%2) cout << 1 << endl;
else cout << 0 << endl;
}
}return 0;
}
推荐阅读
- 贪心|Codeforces D. Solve The Maze (bfs & 贪心) (Round #648 Div.2)
- 比赛&训练|Codeforces D. Omkar and Bed Wars (思维 / 构造) (Golab Round 10)
- Codeofrces C. Omkar and Waterslide (模拟 / 暴力) (Global Round 10)
- 比赛&训练|Codeforces E. Directing Edges (拓扑排序 / 构造有向图) (Round #656 Div.3)