QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#839289 | #9952. JUMPin' JUMP UP!!! | N_z_ | WA | 470ms | 14260kb | C++98 | 1.8kb | 2025-01-01 16:31:23 | 2025-01-01 16:31:29 |
Judging History
answer
//just test
#include<bits/stdc++.h>
#define N 100010
#define LL long long
using namespace std;
char s2[N],s1[N];
LL p[N],H1[N],H2[N],h1[N],h2[N],pp[N];
int a[N],next[N];
const LL P=99959;
const LL MOD=100001651;
const LL MmOD=100001611;
typedef pair<LL,LL> PP;
map<PP,int>s;
int main()
{
int T,n,m,q,cnt,j,v; LL t; long long k;
p[0]=1;pp[0]=1;for (int i=1;i<N;i++) p[i]=p[i-1]*P%MOD,pp[i]=pp[i-1]*P%MmOD;
scanf("%d",&T);
while(T--)
{
scanf("%d%d%d%s%s",&n,&m,&q,s1+1,s2+1);
next[0]=-1;
for (int i=1;i<=m;i++)
{
int p=next[i-1];
while (p>=0 && s2[p+1]!=s2[i]) p=next[p];
next[i]=p+1;
}
int qq=m-next[m];if (next[m]*2<m) qq=m;
s.clear();
H1[0]=H1[1]=0;h1[0]=h1[1]=0;
for (int i=1;i<=m;i++) H1[1]=(H1[1]*P+(s1[i]-'a'+1))%MOD,
h1[1]=(h1[1]*P+(s1[i]-'a'+1))%MmOD;
for (int i=m+1;i<=n;i++) H1[i-m+1]=((((H1[i-m]-p[m-1]*(s1[i-m]-'a'+1)%MOD)+MOD)%MOD)*P%MOD+(s1[i]-'a'+1))%MOD,
h1[i-m+1]=((((h1[i-m]-pp[m-1]*(s1[i-m]-'a'+1)%MmOD)+MmOD)%MmOD)*P%MmOD+(s1[i]-'a'+1))%MmOD;
H2[0]=0;h2[0]=0;for (int i=1;i<=m;i++) H2[i]=(H2[i-1]*P+(s2[i]-'a'+1))%MOD,
h2[i]=(h2[i-1]*P+(s2[i]-'a'+1))%MmOD;
cnt=0;LL tt;
for (int i=1;i<=m;i++)
{
t=((((H2[m]-H2[i]*p[m-i]%MOD)+MOD)%MOD)*p[i]+H2[i])%MOD;
tt=((((h2[m]-h2[i]*pp[m-i]%MmOD)+MmOD)%MmOD)*pp[i]+h2[i])%MmOD;
if (!s[PP(t,tt)]) s[PP(t,tt)]=++cnt,a[cnt]=i;
}
while (q--)
{
scanf("%d%lld",&j,&k);
t=H1[j]; tt=h1[j];
v=s[PP(t,tt)];
if(!s[PP(t,tt)])puts("0");else printf("%lld\n",(k-a[v]+qq)/qq);
}
}
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 7448kb
input:
1 4 2 3 abcd ba 1 2 2 2 3 2
output:
1 0 0
result:
ok 3 tokens
Test #2:
score: -100
Wrong Answer
time: 470ms
memory: 14260kb
input:
1126 100 19 100 bzbzbzbzbzbzbzbyydzbzbzbzbzbzbzbzbyydzbzbzbzbzbzbzbzbyydzbzbzbzbzbzbzbzbyydzbzbzbzbzbzbzbzbyydzbzbzb bzbzbzbzbzbzbzbyydz 56 76480443552173389 38 692816130192550219 33 703112329902236202 74 338839552028748732 5 231782307290688600 11 676202903706926230 23 327149191556259670 46 89836370...
output:
4025286502745967 36464006852239485 37005912100117695 17833660633092038 12199068804773085 35589626510890854 17218378502961036 47282300283677508 49424514696701914 718335379405514 21864557806215529 34660711060158649 10954133132284723 4309231433797528 51886468906311730 8242825662888107 52502379720138545...
result:
wrong answer 32201st words differ - expected: '25223307291231491', found: '107199055987733837'