codeforces A. Distance and Axis

codeforces A. Distance and Axis_第1张图片

题目

题意:

给你两个整数 n , k n,k n,k,其中 A A A点刚开始的坐标为 n n n,现在你要保证 ∣ ( B − 0 ) − ( A − B ) ∣ = k |(B-0)-(A-B)|=k (B0)(AB)=k,问 B B B的坐标是多少。

思路:

我们将公式化简一下可以得到 ∣ 2 ∗ B − A ∣ = k |2*B-A|=k 2BA=k,我们假设 A ≥ 2 ∗ B A\geq2*B A2B,那么就有 ( A − k ) / 2 = B (A-k)/2=B (Ak)/2=B ( n − k ) / 2 = B (n-k)/2=B (nk)/2=B,所以当 n < k nn<k时, B B B为负数,这是不允许的,所以 a n s = k − n ans=k-n ans=kn,当 ( n − k ) % 2 ≠ 0 (n-k)\%2\not=0 (nk)%2=0的时候,那么我们只要 n + 1 n+1 n+1就可以满足 ( n − k ) % 2 = 0 (n-k)\%2=0 (nk)%2=0

#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;
}

你可能感兴趣的:(codeforces)