71912024-01-03 08:53:23anonTrükkcpp17Időlimit túllépés 0/60600ms19040 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);
            ans += solve(nio, epv, swith);
        }
    }
    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
1Elfogadva0/03ms1864 KiB
2Időlimit túllépés0/0600ms2936 KiB
3Hibás válasz0/33ms2332 KiB
4Hibás válasz0/33ms2552 KiB
5Hibás válasz0/33ms2632 KiB
6Hibás válasz0/33ms2640 KiB
7Időlimit túllépés0/2600ms6388 KiB
8Időlimit túllépés0/2561ms6552 KiB
9Időlimit túllépés0/2565ms6936 KiB
10Időlimit túllépés0/2566ms10096 KiB
11Időlimit túllépés0/2563ms11264 KiB
12Időlimit túllépés0/2574ms10268 KiB
13Időlimit túllépés0/2574ms4748 KiB
14Időlimit túllépés0/2558ms4844 KiB
15Időlimit túllépés0/2559ms4992 KiB
16Időlimit túllépés0/2550ms5164 KiB
17Időlimit túllépés0/2574ms5388 KiB
18Időlimit túllépés0/2546ms5568 KiB
19Időlimit túllépés0/2600ms6672 KiB
20Időlimit túllépés0/2569ms6848 KiB
21Időlimit túllépés0/2555ms6696 KiB
22Időlimit túllépés0/2578ms6356 KiB
23Időlimit túllépés0/2574ms6420 KiB
24Időlimit túllépés0/2570ms6576 KiB
25Időlimit túllépés0/2559ms6520 KiB
26Időlimit túllépés0/2578ms5608 KiB
27Időlimit túllépés0/2550ms6640 KiB
28Időlimit túllépés0/2579ms19040 KiB
29Hibás válasz0/2223ms6784 KiB
30Hibás válasz0/257ms6892 KiB