QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#762904 | #5312. Levenshtein Distance | highkj | TL | 0ms | 4088kb | C++17 | 1.8kb | 2024-11-19 17:12:02 | 2024-11-19 17:12:03 |
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;
long long f[M][M+M];
int k;
string s,t;
const int ba=131;
ull ha[N],ha1[N],jc[N];
int n,m;
ull has(int l,int r) {
return ha[r]-ha[l-1]*jc[r-l+1];
}
ull has1(int l,int r) {
return ha1[r]-ha1[l-1]*jc[r-l+1];
}
int lcp(int x,int y) {
int l=0,r=min(n-x+1,m-y+1),res=0;
while(l<=r) {
int mid=l+r>>1;
if(has(x,x+mid-1)==has1(y,y+mid-1)) l=mid+1,res=mid;
else r=mid-1;
}
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) {
memset(f,0,sizeof f);
f[0][M]=lcp(1,le);
rep(nowk,0,k) {
rep(l,-nowk,nowk) {
int len1=f[nowk][l+M],len2=len1+l+le-1;
f[nowk+1][l+M]=max(f[nowk+1][l+M],f[nowk][l+M]+lcp(len1+2,len2+2)+1);
f[nowk+1][l+M-1]=max(f[nowk+1][l+M-1],f[nowk][l+M]+lcp(len1+2,len2+1)+1);
f[nowk+1][l+M+1]=max(f[nowk+1][l+M+1],f[nowk][l+M]+lcp(len1+1,len2+2));
}
}
rep(l,max(1-n,-k),min(k,m-le+1-n)) {
rep(nowk,0,k) {
if(f[nowk][l+M]>=n) {
ans[nowk]++;
break;
}
}
}
}
rep(i,0,k) {
// ans[i]+=ans[i-1];
printf("%d\n",ans[i]);
}
return false;
}
详细
Test #1:
score: 100
Accepted
time: 0ms
memory: 4088kb
input:
4 aaa aabbaab
output:
0 5 15 7 1
result:
ok 5 number(s): "0 5 15 7 1"
Test #2:
score: -100
Time Limit Exceeded
input:
30 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA...