QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#866148#9731. Fuzzy Rankingucup-team3646#WA 18ms3712kbC++202.5kb2025-01-22 13:05:292025-01-22 13:05:30

Judging History

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

  • [2025-01-22 13:05:30]
  • 评测
  • 测评结果:WA
  • 用时:18ms
  • 内存:3712kb
  • [2025-01-22 13:05:29]
  • 提交

answer

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

using ll = long long;
#define rep(i, n) for(ll i = 0; i < (n); ++i)
#define rep2(i, l, r) for(ll i = (l); i < (r); ++i)

using vi = vector<int>;
using vvi = vector<vi>;
using vll = vector<ll>;

#define all(A) A.begin(), A.end()
#define elif else if
using pii = pair<ll, ll>;

bool chmin(auto &a, auto b) {return a > b ? a = b, 1 : 0;}
bool chmax(auto &a, auto b) {return a < b ? a = b, 1 : 0;}

struct IOS {
  IOS() {
    cin.tie(0);
    ios::sync_with_stdio(0);
  }
} iosetup;


template<class T>
void print(vector<T> a) {
  for(auto x : a) cout << x << ' ';
  cout << endl;
}

void print(auto x) {
  cout << x << endl;
}

template<class Head, class... Tail>
void print(Head &&head, Tail &&...tail) {
  cout << head << ' ';
  print(forward<Tail>(tail)...);
}


struct SCC {
  int n;
  vi cmp, order, use;
  vvi g, rg, group;

  SCC(int n, vector<pair<int, int>> edge) :
    n(n), g(n), rg(n), cmp(n, -1), use(n) {
      for(auto [from, to] : edge) {
        g[from].push_back(to);
        rg[to].push_back(from);
      }
      rep(i, n) dfs(i);
      int c = 0;
      rep(i, n) c += rdfs(order[n-1-i], c);
      group.resize(c);
      rep(i, n) group[cmp[i]].push_back(i);
    }
  
  void dfs(int v) {
    if(use[v]) return;
    use[v] = 1;
    for(auto to : g[v]) dfs(to);
    order.push_back(v);
  }
  int rdfs(int v, int c) {
    if(cmp[v] != -1) return 0;
    cmp[v] = c;
    for(auto to : rg[v]) rdfs(to, c);
    return 1;
  }
};

void solve(){
  int N,K,Q;
  cin>>N>>K>>Q;
  vector<vector<int>> P(K,vector<int> (N));
  vector<pair<int,int>> edge;
  rep(i,K){
    rep(j,N){
      cin>>P[i][j];
      P[i][j]--;
      if(j!=0){
        edge.push_back({P[i][j-1],P[i][j]});
      }
    }
  }
  SCC S(N,edge);
  auto VV=S.group;
  vector<int> U(N,0);
  ll VN=VV.size();
  vector<ll> GS(VN+1,0);
  vector<ll> GS2(VN+1,0);
  rep(i,VN){
    for(int v:VV[i])U[v]=i;
    ll vn=VV[i].size();
    GS[i+1]=vn+GS[i];
    GS2[i+1]=vn*(vn-1)/2+GS2[i];
  }
  ll v=0;
  rep(q,Q){
    ll id,l,r;
    cin>>id>>l>>r;
    id=(id+v)%K;
    l=(l+v)%N;
    r=(r+v)%N;
    
    ll an=0;
    if(U[l]==U[r]){
      ll len=r-l+1;
      an=len*(len-1)/2;
    }
    else{
      if(U[l]+1<U[r]){
        an+=GS2[U[r]]-GS2[U[l]+1];
      }
      ll L=GS[U[l]+1]-l;
      ll R=r-GS[U[r]]+1;
      an+=L*(L-1)/2+R*(R-1)/2;
    }

    cout<<an<<"\n";
    v=an;
  }

}




int main(){
  int T;
  cin>>T;
  while(T--)solve();
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

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

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: 18ms
memory: 3584kb

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:

22
15
9
0
22
8
1
27
7
11
11
31
10
11
37
53
46
1
4
11
1
6
28
0
0
10
10
6
6
15
0
3
15
15
72
42
7
1
6
25
4
13
10
28
28
51
13
20
11
31
10
11
11
2
0
36
18
13
16
7
0
6
1
43
15
6
6
6
4
1
2
37
0
3
7
9
0
51
15
42
3
6
16
16
0
11
16
1
4
21
9
13
20
20
1
16
16
19
42
49
57
4
3
39
46
29
29
6
3
49
4
4
0
28
3
0
25
1...

result:

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