【CF1463C】Busy Robot

链接


传送门

code

果然这个数据范围会爆int

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cctype>
#include <vector>
#define int long long

using namespace std;
inline int read(){
    
    
    int x = 0, op = 1; char ch = getchar();
    while (!isdigit(ch)){
    
    
        if (ch == '-') op = -1; ch = getchar();}
    while (isdigit(ch)){
    
    
        x = (x << 1) + (x << 3) + (ch ^ 48);
        ch = getchar();
    }
    return x * op;
}
inline void write(int x){
    
    
    if (x < 0) putchar('-'), x = - x;
    if (x > 9) write(x / 10);
    putchar('0' + x % 10);
}

const int N = 1e5 + 10;

int inRange(int l, int r, int x){
    
    
    return x >= min(l, r) && x <= max(l, r);
}

int sng(int pos, int x){
    
    
    return x >= pos? 1: -1;
}

void solve(){
    
    
    int n = read();
    vector<pair<int, int>> move;
    for (int i = 0, t, x; i < n; ++i) {
    
    
        t = read(), x = read();
        move.push_back(make_pair(t, x));
    }
    move.push_back(make_pair(1e12, 0));
    int pos = 0, cnt = 0, t = 0, op = 0;
    for (int i = 0; i < n; ++i) {
    
    
        if (t == 0){
    
    
            t = abs(move[i].second - pos);
            op = sng(pos, move[i].second);
        }
        int temp = min(t, move[i + 1].first - move[i].first);

        cnt += inRange(pos, pos + temp * op, move[i].second);
        pos += op * temp;
        t -= temp;
    }

    printf("%lld\n", cnt);
}

signed main(){
    
    
    int cases = read();
    while (cases--){
    
    
        solve();
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_50070650/article/details/112917547