QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#573002#9310. Permutation Counting 4mojo__hugoWA 205ms3884kbC++202.2kb2024-09-18 17:02:392024-09-18 17:02:40

Judging History

你现在查看的是最新测评结果

  • [2024-09-18 17:02:40]
  • 评测
  • 测评结果:WA
  • 用时:205ms
  • 内存:3884kb
  • [2024-09-18 17:02:39]
  • 提交

answer

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
using lll = __int128;
using ld = long double;

const int N = 1e6 + 5, M = 1e9 + 7;


template<typename T>
struct Fen{
    int n;
    vector<T>a;
    Fen(int n_ = 0) {
        init(n_);
    }
    void init(int n_) {
        n = n_;
        a.assign(n + 1, T{});
    }
    void add(int x, const T& v) {
        for (int i = x;i <= n;i += i & -i) {
            a[i] += v;
        }
    }
    T qry(int x) {
        T ans{};
        for (int i = x;i > 0;i -= i & -i) {
            ans += a[i];
        }
        return ans;
    }
    T qry(int l, int r) {
        return qry(r) - qry(l - 1);
    }
    int kth(const T& k) {
        int x = 0;
        T cur{};
        for (int i = 1 << __lg(n);i > 0;i /= 2) {
            if (x + i <= n && cur + a[i + x] < k) {
                x += i;
                cur += a[x];
            }
        }
        return x + 1;
    }
};

using ull = unsigned long long;

int res;
int a[10], n, L[10], R[10];
void dfs(int i) {
    if (i == n + 1) {
        for (int j = 1;j <= n;j++) {
            if (a[j] > R[j] || a[j] < L[j])return;
        }
        res++;
        return;
    }
    for (int j = 1;j <= n;j++) {
        if (!a[j]) {
            a[j] = i;
            dfs(i + 1);
            a[j] = 0;
        }
    }
}

void solve() {
    cin >> n;
    if (n <= 6) {
        for (int i = 1;i <= n;i++) {
            cin >> L[i] >> R[i];
        }
        res = 0;
        dfs(1);
        cout << res % 2 << endl;
        return;
    }
    set<pair<int, int>>st;
    Fen<ull>t(n + 1);
    bool ok = 1;
    ull s = 0, p = 1;
    for (int i = 1;i <= n;i++) {
        int l, r;
        cin >> l >> r;
        if (st.count({ l,r }))ok = 0;
        st.insert({ l,r });
        p *= 13;
        t.add(l, p);
        t.add(r + 1, -p);
    }
    set<ull>stt;
    for (int i = 1;i <= n;i++) {
        s += t.qry(i);
        if (stt.count(s))ok = 0;
        stt.insert(s);
    }
    cout << !ok << endl;
}

signed main() {
    ios::sync_with_stdio(0), cin.tie(0);
    int t = 1;
    // cout << fixed << setprecision(10);
    cin >> t;
    while (t--)solve();
}

详细

Test #1:

score: 100
Accepted
time: 1ms
memory: 3612kb

input:

4
5
1 2
1 5
1 2
1 2
2 2
5
1 1
2 4
2 3
5 5
3 4
5
3 5
1 2
3 4
3 5
3 3
5
1 5
1 4
4 5
5 5
1 2

output:

0
1
0
0

result:

ok 4 tokens

Test #2:

score: -100
Wrong Answer
time: 205ms
memory: 3884kb

input:

66725
14
7 7
4 6
7 8
8 13
2 13
6 13
6 10
14 14
1 10
9 11
7 9
3 8
4 12
5 12
12
2 6
3 6
7 11
2 5
1 1
6 12
8 12
2 3
7 9
7 8
1 10
1 4
10
4 8
4 4
6 10
9 10
2 3
2 7
1 3
3 4
2 2
3 10
20
3 12
10 14
19 20
19 20
1 9
7 9
13 16
17 17
16 18
2 11
5 19
6 17
11 17
3 6
3 11
7 20
8 17
3 18
10 15
9 20
16
5 10
2 10
2 1...

output:

0
0
0
1
0
1
0
0
1
0
0
1
0
1
0
1
0
1
0
1
1
0
1
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
0
0
1
0
0
0
1
0
1
1
1
0
1
0
0
1
0
0
0
1
0
0
0
1
1
1
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
1
1
0
0
1
0
0
0
0
1
0
0
0
0
0
0
1
1
0
0
0
1
0
0
0
1
1
0
0
0
0
0
0
0
0
1
0
0
0
0
1
0
0
0
0
0
0
1
0
1
0
1
1
0
0
0
0
...

result:

wrong answer 1st words differ - expected: '1', found: '0'