QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#866148 | #9731. Fuzzy Ranking | ucup-team3646# | WA | 18ms | 3712kb | C++20 | 2.5kb | 2025-01-22 13:05:29 | 2025-01-22 13:05:30 |
Judging History
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'