QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#740357#9731. Fuzzy Ranking0x3fffffffWA 17ms3668kbC++233.3kb2024-11-13 09:19:372024-11-13 09:19:38

Judging History

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

  • [2024-11-25 12:28:53]
  • hack成功,自动添加数据
  • (/hack/1257)
  • [2024-11-13 09:19:38]
  • 评测
  • 测评结果:WA
  • 用时:17ms
  • 内存:3668kb
  • [2024-11-13 09:19:37]
  • 提交

answer

#include <bits/stdc++.h>
using namespace std;
using LL = long long;

struct SCC {
    vector<int>dfn, low, scc, siz;
    vector<int>stk, instk;
    vector<vector<int>>e, g;
    int n, tot, cnt;
    SCC() {};
    SCC(int n) {
        this->n = n;
        dfn.resize(n + 1);
        low.resize(n + 1);
        scc.resize(n + 1);
        instk.resize(n + 1);
        siz.resize(n + 1);
        e.assign(n + 1, {});
        g.assign(n + 1, {});
        tot = cnt = 0;
    }

    void add(int a, int b) {
        e[a].push_back(b);
    }

    void work() {
        for (int i = 1;i <= n;i++) {
            if (!dfn[i])
                tarjan(i);
        }
    }

    void tarjan(int u) {
        dfn[u] = low[u] = ++tot;
        stk.push_back(u);
        instk[u] = 1;
        for (int v : e[u]) {
            if (!dfn[v]) {
                tarjan(v);
                low[u] = min(low[u], low[v]);
            }
            else if (instk[v]) {
                low[u] = min(dfn[v], low[u]);
            }
        }
        if (dfn[u] == low[u]) {
            ++cnt;int v;
            do {
                v = stk.back();stk.pop_back();
                instk[v] = 0;
                scc[v] = cnt;
                g[cnt].push_back(v);
                siz[cnt]++;
            } while (v != u);
        }
    }

    struct Graph {
        int n;
        vector<vector<int>>ne;
        vector<int>indeg;
    };

    Graph compass() {
        Graph G;
        G.n = cnt;
        G.indeg.resize(cnt + 1);
        G.ne.resize(cnt + 1);
        for (int u = 1;u <= n;u++) {
            for (int v : e[u]) {
                if (scc[v] == scc[u])continue;
                G.ne[scc[u]].push_back(scc[v]);
                G.indeg[scc[v]]++;
            }
        }
        return G;
    }
};
using LL = long long;

void solve() {
    int n, k, q;
    cin >> n >> k >> q;
    vector a(k + 1, vector<int>(n + 1));
    for (int t = 1;t <= k;t++) {
        for (int i = 1;i <= n;i++) {
            cin >> a[t][i];
        }
    }
    SCC scc(n);
    for (int t = 1;t <= k;t++) {
        for (int i = 1;i < n;i++) {
            scc.add(a[t][i], a[t][i + 1]);
        }
    }
    scc.work();
    auto g = scc.compass();
    // for (int i = 1;i <= n;i++) {
    //     cout << scc.scc[i] << " ";
    // }
    // cout << "\n";
    vector<LL>pre(n + 1);
    unordered_map<int, int>mp;
    for (int i = 1;i <= n;i++) {
        if (mp.count(scc.scc[i])) {
            pre[i] = pre[i - 1] + mp[scc.scc[i]];
        }
        else {
            pre[i] = pre[i - 1];
        }
        mp[scc.scc[i]]++;
    }
    // for (int i = 1;i <= n;i++) {
        // cout << pre[i] << " ";
    // }
    // cout << "\n";
    LL v = 0;
    while (q--) {
        int id, l, r;
        cin >> id >> l >> r;
        id = (id + v) % k + 1, l = (l + v) % n + 1, r = (r + v) % n + 1;
        if (l > r)swap(l, r);
        // cout << l << " " << r << "\n";
        v = pre[r] - pre[l - 1];
        cout << v << "\n";
    }
}

signed main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    int T = 1;
#ifdef LOCAL
    freopen("data.in", "r", stdin);
    freopen("data.out", "w", stdout);
#endif
    cin >> T;
    while (T--)
        solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 3668kb

input:

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

output:

3
10
1
1
2

result:

ok 5 lines

Test #2:

score: -100
Wrong Answer
time: 17ms
memory: 3636kb

input:

2000
10 10 10
4 5 3 6 8 9 2 1 7 10
4 5 6 3 8 9 1 2 10 7
5 4 3 6 8 9 1 2 7 10
4 5 6 3 8 9 1 2 7 10
4 5 3 6 8 9 2 1 10 7
4 5 6 3 8 9 1 2 10 7
5 4 6 3 8 9 1 2 7 10
5 4 6 3 8 9 1 2 10 7
4 5 6 3 8 9 2 1 7 10
5 4 3 6 8 9 2 1 10 7
3 1 6
5 7 8
0 2 3
7 9 9
2 1 9
6 1 6
7 2 3
0 0 4
1 8 1
1 8 7
10 10 10
9 10 5 ...

output:

3
1
1
0
4
3
1
3
2
4
3
0
1
2
1
0
1
4
4
3
7
30
10
7
8
42
25
44
18
39
0
3
15
16
18
11
10
18
18
9
3
8
3
1
1
8
1
5
10
6
1
4
2
4
0
2
3
2
4
2
1
0
0
2
0
0
1
2
0
2
2
1
0
1
4
3
0
4
4
2
18
4
18
29
1
16
7
29
22
25
1
3
3
4
1
4
5
3
3
3
0
0
0
0
0
0
0
0
0
0
2
3
0
4
6
2
3
6
3
0
0
0
0
0
0
0
0
0
0
0
5
1
0
1
5
1
1
1
1
...

result:

wrong answer 1st lines differ - expected: '1', found: '3'