QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#753163 | #9731. Fuzzy Ranking | icesmoke | RE | 13ms | 31604kb | C++17 | 2.7kb | 2024-11-16 11:35:58 | 2024-11-16 11:35:58 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5+5;
int n,m,q;
int col[N],dfn[N],low[N],st[N],idx;
vector<int>h[N],a[N],b[N],lx[N],rx[N];
stack<int>vex;
int cnt;
void tarjan(int u)
{
cnt++;
if(cnt>=1e8){
cout<<"!!!\n";
exit(0);
}
st[u] = 1;
dfn[u] = low[u] = ++ idx;
vex.push(u);
for(int v:h[u]){
if(!dfn[v]){
tarjan(v);
low[u] = min(low[u],low[v]);
}else if(st[v]==1){
low[u] = min(low[u],dfn[v]);
}
}
if (dfn[u] == low[u])
{
col[u] = dfn[u];
while(vex.size() && vex.top()!=u){
col[vex.top()] = dfn[u];
vex.pop();
}
vex.pop();
}
st[u] = 2;
}
void solve()
{
cin>>n>>m>>q;
for (int i = 1; i <= n; i ++ ){
st[i] = dfn[i] = low[i] = 0;
h[i].clear();
}
for (int i = 1; i <= m; i ++ ){
a[i].resize(n+1);
for (int j = 1; j <= n; j ++ ){
cin>>a[i][j];
if(j>1) h[a[i][j-1]].push_back(a[i][j]);
}
}
idx = 0;
for (int i = 1; i <= n; i ++ ){
if(!dfn[i])
tarjan(i);
}
for (int i = 1; i <= m; i ++ ){
b[i].resize(n+1,0);
lx[i].resize(n+1);
rx[i].resize(n+1);
for (int j = 1; j <= n; j ++ ){
int k = j;
while(k<=n && col[a[i][j]]==col[a[i][k]]){
k++;
}
for(int j1=j;j1<k;j1++){
lx[i][j1] = j;
rx[i][j1] = k-1;
}
int len = k - j;
b[i][k-1] = b[i][j-1] + len*(len-1)/2;
j = k - 1;
}
}
int ans = 0;
while(q--){
int id,l,r;
cin>>id>>l>>r;
id = (id + ans)%m + 1;
l = (l + ans)%n + 1;
r = (r + ans)%n + 1;
if(l>n || r>n){
cout<<"!!!!\n";
exit(0);
}
if(col[a[id][l]]==col[a[id][r]]){
int len = r - l + 1;
ans = len * (len - 1) / 2;
}else{
ans = 0;
int len1 = rx[id][l] - l + 1;
int len2 = r - lx[id][r] + 1;
ans += len1 * (len1 - 1) / 2;
ans += len2 * (len2 - 1) / 2;
ans += b[id][lx[id][r]-1] - b[id][rx[id][l]];
}
cout<<ans<<'\n';
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int T;
cin>>T;
while(T--){
solve();
}
}
// 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
詳細信息
Test #1:
score: 100
Accepted
time: 4ms
memory: 31604kb
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: 0
Accepted
time: 13ms
memory: 31548kb
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:
1 1 0 0 3 2 0 2 2 4 1 0 1 1 1 1 2 4 4 3 1 6 28 0 0 10 10 6 6 15 0 3 10 6 16 6 11 1 2 1 1 6 3 3 0 4 5 3 4 1 1 3 2 4 0 3 4 4 4 4 0 0 1 1 2 0 0 1 2 1 1 0 0 1 4 3 0 4 4 1 3 6 16 16 0 11 16 1 4 15 1 4 2 0 0 2 0 1 2 4 0 0 0 0 0 0 0 0 0 0 1 0 0 6 3 0 3 4 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 1 3 1 0 0 3 3 9 1 9 4 ...
result:
ok 20000 lines
Test #3:
score: -100
Runtime Error
input:
8000 5 5 10 3 5 2 4 1 3 2 5 4 1 3 5 2 4 1 3 5 2 4 1 3 5 2 4 1 1 1 1 4 1 3 1 0 3 4 2 3 1 0 1 3 2 3 1 2 3 3 0 2 1 1 3 1 1 2 5 5 10 5 3 1 2 4 3 5 1 2 4 5 3 1 2 4 3 5 1 2 4 5 3 1 2 4 0 0 1 2 0 1 4 1 2 1 3 4 2 0 1 4 3 3 1 4 4 1 3 4 0 0 4 0 0 3 5 5 10 2 3 4 1 5 5 1 4 3 2 1 3 4 2 5 2 3 4 1 5 5 1 3 4 2 1 2 ...
output:
0 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0 0 0 1 0 3 0 3 1 0 3 1 6 1 0 0 0 0 0 0 0 0 0 0 0 1 1 2 1 0 3 0 0 3 0 1 0 0 0 0 0 0 1 0 0 6 1 0 6 0 3 3 3 0 0 3 3 6 1 10 1 3 0 1 0 3 1 0 0 1 0 1 1 1 2 0 0 0 0 0 0 0 0 0 0 0 0 3 1 3 3 1 3 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 6 0 6 6 1 1 1 0 1 1 0 0 1 0 0 0 3 0 1 1 0 2 3 3...