QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#876567#9970. Looping RPSMatutinoWA 10ms83044kbC++173.2kb2025-01-31 00:08:592025-01-31 00:08:59

Judging History

This is the latest submission verdict.

  • [2025-01-31 00:08:59]
  • Judged
  • Verdict: WA
  • Time: 10ms
  • Memory: 83044kb
  • [2025-01-31 00:08:59]
  • Submitted

answer

#include<bits/stdc++.h>
#define reg register
#define int long long
inline int read(){
    reg int x=0,k=1; reg char ch=getchar();
    while (ch<'0'||ch>'9') (ch=='-')&&(k=-1),ch=getchar();
    while (ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*k;
}
const int N=1e6+10,mod=998244353,bs=13;
inline int qpow(reg int a,reg int b=mod-2){
    reg int res=1;
    for (;b;b>>=1,a=a*a%mod) if (b&1) res=res*a%mod; return res;
}
int n,idx,ys[300],inv[N],pos[N],qwq[N],ans[N],id[N];
int ch[N][4],cnt[N],pw[N],sz[N],draw[N],qwq2[N],fa[N],Sz[N];
std::string str[N];
std::vector<int> hsh[N];
inline int calc(reg int id,reg int L){
    reg int len=str[id].size();
    reg int p=(qpow(pw[len],(L-1)/len)-1)*inv[len]%mod;
    p=p*hsh[id][len-1]%mod;
    p=(p*pw[(L-1)%len+1]+hsh[id][(L-1)%len])%mod;
    return p;
}
int find(reg int x){return fa[x]==x?x:fa[x]=find(fa[x]);}
inline void merge(reg int x,reg int y){
    x=find(x),y=find(y);
    if (x^y) fa[y]=x,Sz[x]+=Sz[y];
}
signed main(){
    n=read();
    ys['K']=1,ys['P']=2,ys['N']=3;
    for (reg int i=1;i<=n;i++){
        std::cin>>str[i];
        reg int x=0,len=str[i].size(); 
        hsh[i].resize(len),pw[0]=1; 
        for (reg int i=1;i<=len;i++) pw[i]=1ll*pw[i-1]*bs%mod,inv[i]=qpow(pw[i]-1);
        for (reg int j=0,c;j<str[i].size()&&(c=str[i][j]);j++){
            if (!ch[x][ys[c]]) ch[x][ys[c]]=++idx;
            x=ch[x][ys[c]],sz[x]++;
            hsh[i][j]=((j?hsh[i][j-1]:0)*bs+ys[c])%mod;
        }
        cnt[x]++,id[x]=i,pos[i]=x;
    }
    // std::cerr<<"hsh\n"<<calc(1,1)<<"\n"<<calc(2,1)<<"\n";
    for (reg int i=1;i<=idx;i++) fa[i]=i,Sz[i]=cnt[i];
    for (reg int i=1;i<=n;i++){
        reg int x=0;
        for (reg int j=0,c;j<str[i].size()&&(c=str[i][j]);j++){
            if (c=='K') ans[i]+=sz[ch[x][3]];
            if (c=='P') ans[i]+=sz[ch[x][1]];
            if (c=='N') ans[i]+=sz[ch[x][2]];           
            x=ch[x][ys[c]];
            if (cnt[x]){
                reg int l=1,r=str[i].size()*(j+1),lcp=0;
                while (l<=r){
                    reg int mid=l+r>>1;
                    if (calc(i,mid)==calc(id[x],mid)) lcp=mid,l=mid+1;
                    else r=mid-1;
                }
                lcp++;
                // std::cerr<<"<< "<<i<<" "<<id[x]<<" "<<lcp-1<<"\n";
                reg char c1=str[i][(lcp-1)%str[i].size()],c2=str[id[x]][(lcp-1)%str[id[x]].size()];
                if (c1=='K'&&c2=='N'||c1=='P'&&c2=='K'||c1=='N'&&c2=='P') ans[i]+=cnt[x];
                else if (c2=='K'&&c1=='N'||c2=='P'&&c1=='K'||c2=='N'&&c1=='P') qwq[x]++;
                else draw[i]+=cnt[x],qwq2[x]+=x!=pos[i],merge(x,pos[i]);
            }
        }
    }
    for (reg int i=1;i<=n;i++) ans[i]+=qwq[pos[i]],draw[i]+=qwq2[pos[i]];
    reg int Ans=n*(n-1)*(n-2)/6,ans2=0;
    for (reg int i=1;i<=n;i++) ans2+=ans[i]*(ans[i]-1)>>1,ans2+=(n-ans[i]-draw[i])*(n-ans[i]-draw[i]-1)>>1;
    for (reg int i=1;i<=idx;i++) if (find(i)==i&&Sz[i]) 
        ans2+=Sz[i]*(Sz[i]-1)*(Sz[i]-2)/3,ans2+=Sz[i]*(Sz[i-1])/2*(n-Sz[i]);

    // for (reg int i=1;i<=n;i++) Ans-=,std::cerr<<draw[i]<<"\n";
    // for (reg int i=1;i<=n;i++) ans2+=draw[i]*(n-2);
    // std::cerr<<"<< "<<ans2/2<<"\n";s
    printf("%lld\n",Ans-ans2/2);
    return 0;
}  

詳細信息

Test #1:

score: 100
Accepted
time: 7ms
memory: 82784kb

input:

6
P
PN
KK
N
PKK
PN

output:

6

result:

ok 1 number(s): "6"

Test #2:

score: 0
Accepted
time: 9ms
memory: 81668kb

input:

10
KKKNP
KNKPPKNK
KNKPP
KNKPPKN
KKKN
NNKNNNKNNNKNNNKNNNKNNNKNNNKNNPN
NNKN
NPPN
NNKNNNKNNNKNNNKNNNKNNNKNNNK
KKKNN

output:

3

result:

ok 1 number(s): "3"

Test #3:

score: 0
Accepted
time: 8ms
memory: 82060kb

input:

10
NNNPNNNPNNNPNNNK
KKN
NNNP
KKP
NNNPNNNPNNNPN
KKNKKNKKPN
KNNPNPNKKKNPPKNKKKNKNKKNKPPPNKKPKP
KKPK
KKNKKNK
KKPKKN

output:

3

result:

ok 1 number(s): "3"

Test #4:

score: 0
Accepted
time: 4ms
memory: 81332kb

input:

10
K
PPPNNPPPNNPPPNNPPPNNPPPNNPPPNNPPPNNPPPNNP
PPKP
PPPNNPPPNNPPPNNPPPNNPPPNNPPPNNPPPNNPPPNNPPPK
P
K
N
P
PPPNN
N

output:

25

result:

ok 1 number(s): "25"

Test #5:

score: 0
Accepted
time: 6ms
memory: 83000kb

input:

10
NPNKP
NNNNKNNNNPP
PPKPNNNNPNKKKN
NPNKPNP
NNNNKN
NNNNK
NKNPKKPNPKKNPNKN
NKNPKKPNPKKNPNK
NKNPKKPNPKKNP
NPNKPNPN

output:

30

result:

ok 1 number(s): "30"

Test #6:

score: 0
Accepted
time: 7ms
memory: 81568kb

input:

10
KPKKPKKPKKPKKP
KPKKPKKPKKPKKPKNK
PNPNP
KPK
PN
NPNPNNPNPNK
NKKPKKPKPPKKPKKKKPKNKPPKPPNKNP
NPNPNNP
PNPNPK
NPNPN

output:

39

result:

ok 1 number(s): "39"

Test #7:

score: 0
Accepted
time: 5ms
memory: 83044kb

input:

4
KKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPK
NN
KKP
KKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKPKKNK

output:

1

result:

ok 1 number(s): "1"

Test #8:

score: 0
Accepted
time: 4ms
memory: 82380kb

input:

7
KPKN
KPKNKPKNKPKNKPKK
NKPPNNNPKKNN
KPPKPKPPKPKPPKPKPPKPKPP
KPKNKPKNKPKNKP
KPPKP
KPPKPKPPKPKPPKPKPPKPKPPKPN

output:

2

result:

ok 1 number(s): "2"

Test #9:

score: 0
Accepted
time: 7ms
memory: 82268kb

input:

10
NKNNKNKN
KPKN
PKPN
PNNNNNNKKNNPNNKNPPKPPNPNPPKKKPNNNPNPKKNK
PKPNPKP
PKPNPK
KPKNKP
NKNNKNKNNKNPN
KPKNKPK
NKNNK

output:

39

result:

ok 1 number(s): "39"

Test #10:

score: 0
Accepted
time: 8ms
memory: 82140kb

input:

300
NKNPNK
NKKNKK
KPPNPN
KKPNKNK
PKKNPKP
KPKPPPN
NNKPPNN
NPKPPKN
KNNKKPK
PPPNPKK
NKPKNP
KPKNNPP
NNPKNP
PNPPPKN
PKKPNP
PPNNKK
PKNKNK
PKNPNK
NKNPNPP
KNKNNPN
NKPPPPK
NNPPKKN
KNKKNPK
KKNNPKN
PPPKNK
NPPPPPP
NKKPKPP
KNKNPPK
KPKPNNK
NPNNKN
PNPNKP
PNPKKP
KKKKPKN
NNNKNPK
NPNKPNK
NNNKNK
PPKKNKP
NNNKPPK
KPNKPP...

output:

1102940

result:

ok 1 number(s): "1102940"

Test #11:

score: 0
Accepted
time: 5ms
memory: 82364kb

input:

91
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKN
KKKKKKKKP
PNPKPPNP
KKKN
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKN
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKP
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKN
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKP
KKKKKKKKKKKKKKKKKKKKKKN
KKKKKKKN
KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKP
KKKKKKKKKKKKP
...

output:

2151

result:

ok 1 number(s): "2151"

Test #12:

score: -100
Wrong Answer
time: 10ms
memory: 81504kb

input:

72
PKPPKPPKPPKPPKPPN
PKP
NNNNNK
NPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNPNNP
NNPNNPNNPNNPNNPNNK
NP
PPPPPPN
PKPPKPPKPPKPPKPP
PPPPKPP
PPK
NNNNNPP
NNNNPNNNNPNNNNPN
KPNNNKKPPKPKKNPPKKNNKPKPKPKPPPKPPKPNNKPPKPPPNNNKKNNPKKKKKN...

output:

15071

result:

wrong answer 1st numbers differ - expected: '14794', found: '15071'