给你两个整数 n , k n,k n,k,其中 A A A点刚开始的坐标为 n n n,现在你要保证 ∣ ( B − 0 ) − ( A − B ) ∣ = k |(B-0)-(A-B)|=k ∣(B−0)−(A−B)∣=k,问 B B B的坐标是多少。
我们将公式化简一下可以得到 ∣ 2 ∗ B − A ∣ = k |2*B-A|=k ∣2∗B−A∣=k,我们假设 A ≥ 2 ∗ B A\geq2*B A≥2∗B,那么就有 ( A − k ) / 2 = B (A-k)/2=B (A−k)/2=B即 ( n − k ) / 2 = B (n-k)/2=B (n−k)/2=B,所以当 n < k n
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
typedef long long ll;
typedef vector<int> veci;
typedef vector<ll> vecl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
template <class T>
inline void read(T &ret) {
char c;
int sgn;
if (c = getchar(), c == EOF) return ;
while (c != '-' && (c < '0' || c > '9')) c = getchar();
sgn = (c == '-') ? -1:1;
ret = (c == '-') ? 0:(c - '0');
while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + (c - '0');
ret *= sgn;
return ;
}
inline void outi(int x) {if (x > 9) outi(x / 10);putchar(x % 10 + '0');}
inline void outl(ll x) {if (x > 9) outl(x / 10);putchar(x % 10 + '0');}
int main() {
int t; read(t); while (t--) {
int n, k; read(n), read(k);
if (n < k) printf("%d\n", k - n);
else if ((n - k) % 2 == 0) printf("0\n");
else printf("1\n");
}
return 0;
}