0
点赞
收藏
分享

微信扫一扫

Codeforces Round #665 (Div. 2) A

云上笔记 2022-09-16 阅读 182



A

Codeforces Round #665 (Div. 2) A_#define


题目大意:

|OB - |A - B|| = K


分析:

怎么思考?怎么知道要分哪些情况?

input只给了k和n两个值,需要从它俩下手。于是思考,当k大,当n大的情况去构造B,发现只有两种构造方式,此题便得解。


当n<k的时候,也就是初始A<k,那么要构造B-|A-B|=k,必须是B点和A点重合在K处,不能是A点到0处(此时B=k,A=0,|A-B|=k,B - |A-B|=0),也不能B和A都落在0点(此时不满足作差等于k)。因此,该情况直接输出n-k

当n>=k的时候,那么B最好是构造在0--n之间,此时B每移动一位,导致|OB-|A-B||变化2,因此,肯定要和奇偶性有关,可以推导此时的式子:

|A-B|-BO = K

A-2B=K

2B=(A-K)

A-K必须是偶数,因此就判断A-K的奇偶性即可,若A-k为奇数,那么A要向左或者向右移动1即可解决;若A-K为偶数,那不必移动,根据2B=A-K式子,B值一定存在。



#include <bits/stdc++.h>

#define rep(i, a, b) for(int i = a; i <= b; i ++)
#define endl '\n'
#define x first
#define y second
using namespace std;
typedef pair<int, int> pii;
const int N = 2e5 + 5, INF = 0x3f3f3f3f;


void s(){
int n, k;
cin >> n >> k;

if(n > k) {
if((n - k) & 1) cout << 1 << endl;
else cout << 0 << endl;
}
else if(n <= k){
cout << k - n << endl;
}

}

int main(){
cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
#ifdef LOCAL
FILE *pPp = fopen("1input.txt", "a+");fclose(pPp);
freopen("1input.txt", "r", stdin);
//freopen("1output.txt", "w", stdout);
#endif
int t;
cin >> t;
while(t--) s();


return 0;
}

举报

相关推荐

0 条评论