「二項の答え+接頭辞と」防衛

防衛

トピックリンク:防衛

効果の対象に

あなたは\(N \)項目、の3つの情報から、各項目、起動、終了、すべての時間は出発点から拡張することができますが、上に置くどの位置の各距離延長上の項目を入れて、今尋ねることになりますアイテムの奇数

問題のトピックソリューション

このタイトルの規定は唯一、少し奇妙現れる接頭辞を使用することを検討することができますので、非常に裸の半分のタイトル、タイトルの不良判定の二分法の下に見えたので、奇数+奇数=偶数、裁判官のようなので、もしプレフィックスの現在位置まだ左、または右に、その後、奇数であります

//#define fre yes

#include <cstdio>
#include <iostream>

const int N = 2000005;
struct Node {
    long long s, e, d;
}a[N];

int n;
long long l, r;

long long check(long long x) {
    long long ans = 0;
    for (int i = 1; i <= n; i++) {
        if(a[i].s <= x) {
            ans += (std::min(x, a[i].e) - a[i].s) / a[i].d + 1;
        }
    } return ans;
}

int main() {
    static int t;
    scanf("%d", &t);
    while(t--) {
        scanf("%d", &n);
        for (int i = 1; i <= n; i++) {
            scanf("%d %d %d", &a[i].s, &a[i].e, &a[i].d);
        }

        l = 0, r = (1 << 31) - 1;
        while(l < r) {
            long long mid = (l + r) >> 1;
            if(!(check(mid) & 1)) l = mid + 1;
            else r = mid;
        }

        long long ans = check(r) - check(r - 1);
        if(ans) {
            printf("%lld %lld\n", l, ans);
        } else puts("There's no weakness.");
    } return 0;
}

おすすめ

転載: www.cnblogs.com/Nicoppa/p/11513091.html