72032024-01-03 13:03:23anonTrükkcpp17Hibás válasz 0/60600ms17128 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;
}
ll solve(const vector<bool> &is_odd, const vector<ll> &epv, const vector<vector<ll>> &swith) {
    bool can[2] { true, true };
    ll i, j, bc, ans;
    ans = 0;
    if(is_odd.size() == epv.size()) {
        for(i = 1; i < epv.size(); i++) {
            bc = epv[i] - epv[i - 1];
            for(j = is_odd[i]; j <= bc; j += 2)
                ans += combs(bc, j);
        }
    }
    else {
        for(const auto &x : swith[is_odd.size()]) {
            if(is_odd[x])
                can[1] = false;
            else
                can[0] = false;
            if(!can[0] && !can[1])
                return 0;
        }
        for(i = 0; i < 2; i++) {
            if(!can[i])
                continue;
            vector<bool> nio = is_odd;
            nio.push_back(i ^ nio.back());
            ans += solve(nio, epv, swith);
        }
    }
    if(ans)
        cout << ans << '\n';
    return ans;
}
int main() {
    FastIO;
    ll i, j, 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][0]--;
        }
    }
    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<vector<ll>> swith(epv.size());
        for(j = 0; j < K[i]; j++)
            swith[lower_bound(all(epv), ranges[i][j][1]) - epv.begin()].push_back(lower_bound(all(epv), ranges[i][j][0]) - epv.begin());
        cout << solve({ false }, epv, swith) << '\n';
    }
    return 0;
}
RészfeladatÖsszpontTesztVerdiktIdőMemória
base0/60
1Hibás válasz0/03ms1828 KiB
2Időlimit túllépés0/0560ms3016 KiB
3Hibás válasz0/33ms2316 KiB
4Hibás válasz0/33ms2464 KiB
5Hibás válasz0/33ms2552 KiB
6Hibás válasz0/33ms2576 KiB
7Időlimit túllépés0/2600ms4820 KiB
8Időlimit túllépés0/2570ms5380 KiB
9Időlimit túllépés0/2558ms4908 KiB
10Időlimit túllépés0/2559ms7072 KiB
11Időlimit túllépés0/2550ms6140 KiB
12Időlimit túllépés0/2570ms7672 KiB
13Időlimit túllépés0/2559ms4164 KiB
14Időlimit túllépés0/2559ms4292 KiB
15Időlimit túllépés0/2561ms4156 KiB
16Időlimit túllépés0/2566ms4496 KiB
17Időlimit túllépés0/2537ms4736 KiB
18Időlimit túllépés0/2559ms4460 KiB
19Időlimit túllépés0/2563ms5544 KiB
20Időlimit túllépés0/2563ms5816 KiB
21Időlimit túllépés0/2561ms6156 KiB
22Időlimit túllépés0/2563ms5144 KiB
23Időlimit túllépés0/2578ms5532 KiB
24Időlimit túllépés0/2542ms5660 KiB
25Időlimit túllépés0/2574ms5588 KiB
26Időlimit túllépés0/2578ms5100 KiB
27Időlimit túllépés0/2561ms6224 KiB
28Időlimit túllépés0/2560ms17128 KiB
29Hibás válasz0/254ms5980 KiB
30Hibás válasz0/228ms5832 KiB