QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#763241 | #5312. Levenshtein Distance | highkj | WA | 1652ms | 141988kb | C++11 | 1.9kb | 2024-11-19 19:08:52 | 2024-11-19 19:08:53 |
Judging History
answer
#include <bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
#include <ext/rope>
using namespace __gnu_pbds;
using namespace std;
#define pb push_back
#define rep(i,x,y) for(register int i=x;i<=y;i++)
#define rep1(i,x,y) for(register int i=x;i>=y;--i)
#define fire signed
#define il inline
template<class T> il void print(T x) {
if(x<0) printf("-"),x=-x;
if (x > 9) print(x / 10);
putchar(x % 10 + '0');
}
#define ull unsigned long long
int T=1;
const int N=1e5+10;
const int M=32;
int f[M][M+M];
int k;
string s,t;
const int ba=131;
ull ha[N],ha1[N],jc[N];
int n,m;
gp_hash_table<int,int>mp[N];
il int lcp(int x,int y) {
if(mp[x][y]||s[x]!=t[y]) {
return mp[x][y];
}
int l=0,r=min(n-x+1,m-y+1),res=0;
while(l<=r) {
int mid=l+r>>1;
if(ha[x+mid-1]-ha[x-1]*jc[mid]==ha1[y+mid-1]-ha1[y-1]*jc[mid]) l=mid+1,res=mid;
else r=mid-1;
}
mp[x][y]=res;
return res;
}
int ans[N];
fire main() {
cin.tie(nullptr)->sync_with_stdio(false);
jc[0]=1;
cin>>k;
cin>>s;
cin>>t;
s=" "+s;
t=" "+t;
n=s.size()-1;
m=t.size()-1;
rep(i,1,max(n,m)) jc[i]=jc[i-1]*ba;
rep(i,1,n) ha[i]=ha[i-1]*ba+s[i]-'a'+1;
rep(i,1,m) ha1[i]=ha1[i-1]*ba+t[i]-'a'+1;
rep(le,1,m) {
rep(nowk,0,k) rep(l,-nowk,nowk) f[nowk][l+M]=false;
// f[0][M]=lcp(1,le);
rep(nowk,0,k-1) {
rep(l,-nowk,nowk) {
int len1=f[nowk][l+M],len2=len1+l+le-1;
f[nowk][l+M]+=lcp(len1+1,len2+1);
f[nowk+1][l+M]=max(f[nowk+1][l+M],f[nowk][l+M]+1);
f[nowk+1][l+M-1]=max(f[nowk+1][l+M-1],f[nowk][l+M]+1);
f[nowk+1][l+M+1]=max(f[nowk+1][l+M+1],f[nowk][l+M]);
}
}
rep(l,max(1-n,-k),min(k,m-le+1-n)) {
rep(nowk,0,k) {
// int len1=f[nowk][l+M],len2=len1+l+le-1;
// f[nowk][l+M]+=lcp(len1+1,len2+1);
if(f[nowk][l+M]>=n) {
ans[nowk]++;
break;
}
}
}
}
rep(i,0,k) printf("%d\n",ans[i]);
return false;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 26436kb
input:
4 aaa aabbaab
output:
0 5 15 7 1
result:
ok 5 number(s): "0 5 15 7 1"
Test #2:
score: 0
Accepted
time: 1652ms
memory: 117764kb
input:
30 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...
output:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
result:
ok 31 numbers
Test #3:
score: -100
Wrong Answer
time: 580ms
memory: 141988kb
input:
30 BBAAABAABBBA ABBABBBBAABAAAABABBBAABAABBAABAAAAAABAABABBAAAABAAAAABABAABAABBABBAAAABBBBAABBABAAABAABAABBBBBABBABABBBBABBBBAAABBABABBBBAAABBBBAAAABABABABABABABAAABBBBBAABAABAABBAABBBAABBBBBBBABAABAABAABABAABAAABAABBBAABABBABBAAABAAAABABABBABBBAAABBBAAAABBBBABABABAABAABBBBBBBBBAABBBABABBBABAABBABBA...
output:
17 662 8230 50302 166666 310121 345469 280387 227200 209178 203013 198561 105117 102147 99771 97730 96058 94730 93633 92720 92060 91525 91143 90831 90585 90419 90288 90200 90120 90068 89960
result:
wrong answer 31st numbers differ - expected: '90035', found: '89960'