71902024-01-02 20:02:49anonTrükkcpp17Futási hiba 0/6041ms10108 KiB
#include <bits/stdc++.h>
#define MOD ((ll) (1e9 + 7))
#define all(x) (x).begin(), (x).end()
#define FastIO ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
typedef long long ll;
using namespace std;
ll combs(ll n, ll k) {
    ll i, result;
    result = 1;
    for(i = n - k + 1; i <= n; i++)
        result *= i;
    for(i = 2; i <= k; i++)
        result /= i;
    return result;
}
int main() {
    FastIO;
    ll i, j, k, oc, fr, unc, ans, T;
    cin >> T;
    vector<ll> N(T);
    vector<ll> K(T);
    vector<vector<array<ll, 2>>> ranges(T);
    for(i = 0; i < T; i++) {
        cin >> N[i] >> K[i];
        ranges[i].resize(K[i]);
        for(j = 0; j < K[i]; j++) {
            cin >> ranges[i][j][0] >> ranges[i][j][1];
            ranges[i][j][1]++;
        }
    }
    for(i = 0; i < T; i++) {
        set<ll> eps;
        for(j = 0; j < K[i]; j++)
            eps.insert(all(ranges[i][j]));
        vector<ll> epv(all(eps));
        eps.clear();
        vector<array<ll, 2>> indices(K[i]);
        for(j = 0; j < K[i]; j++) {
            for(k = 0; k < 2; k++)
                indices[j][k] = lower_bound(all(epv), ranges[i][j][k]) - epv.begin();
        }
        sort(all(indices), [](auto &a, auto &b) { return (a[1] - a[0]) < (b[1] - b[0]); });
        // 0 = uncat, 1 = odd, 2 = even
        vector<ll> labels(epv.size() - 1, 0);
        for(j = 0; j < K[i]; j++) {
            oc = 0;
            unc = -1;
            for(k = indices[j][0]; k < indices[j][1]; k++) {
                switch(labels[k]) {
                    case 0:
                        assert(unc == -1);
                        unc = k;
                        break;
                    case 1:
                        oc++;
                }
            }
            if(oc % 2) {
                if(unc != -1)
                    labels[unc] = 2;
            }
            else {
                if(unc == -1) {
                    cout << "0\n";
                    goto next;
                }
                labels[unc] = 1;
            }
        }
        ans = 0;
        for(j = 0; j < labels.size(); j++) {
            fr = epv[j + 1] - epv[j];
            for(k = (labels[j] == 1); k <= fr; k += 2)
                ans += combs(fr, k);
        }
        cout << ans << '\n';
        next:;
    }
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/60
1Elfogadva0/03ms1828 KiB
2Futási hiba0/020ms4688 KiB
3Futási hiba0/33ms2340 KiB
4Futási hiba0/33ms2424 KiB
5Futási hiba0/33ms2660 KiB
6Futási hiba0/33ms2644 KiB
7Futási hiba0/239ms7692 KiB
8Futási hiba0/241ms7820 KiB
9Futási hiba0/241ms8028 KiB
10Futási hiba0/241ms8220 KiB
11Futási hiba0/239ms8432 KiB
12Futási hiba0/239ms8640 KiB
13Futási hiba0/235ms8100 KiB
14Futási hiba0/235ms8112 KiB
15Futási hiba0/235ms8312 KiB
16Futási hiba0/235ms8388 KiB
17Futási hiba0/235ms8512 KiB
18Futási hiba0/235ms8556 KiB
19Futási hiba0/241ms10104 KiB
20Futási hiba0/241ms10104 KiB
21Futási hiba0/241ms10108 KiB
22Futási hiba0/239ms8788 KiB
23Futási hiba0/239ms9492 KiB
24Futási hiba0/239ms9620 KiB
25Futási hiba0/241ms8904 KiB
26Futási hiba0/235ms8672 KiB
27Futási hiba0/241ms9624 KiB
28Futási hiba0/237ms9308 KiB
29Futási hiba0/217ms6568 KiB
30Futási hiba0/217ms6700 KiB