QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#571247 | #810. Plagiarism | C1942huangjiaxu | ML | 0ms | 0kb | C++14 | 1.5kb | 2024-09-17 21:25:40 | 2024-09-17 21:25:41 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int N=205,inf=1e9;
int k,n,m,f1[N][N][N],f2[N][N][N],f3[N][N][N],f4[N][N][N],g[N][N],mc[N][N];
char a[N],b[N];
inline void U(int &x,int y){
if(x>y)x=y;
}
int main(){
scanf("%d",&k);
scanf("%s%s",a+1,b+1);
n=strlen(a+1),m=strlen(b+1);
memset(f1,0x3f,sizeof(f1));
memset(f2,0x3f,sizeof(f2));
memset(f3,0x3f,sizeof(f3));
memset(f4,0x3f,sizeof(f4));
memset(g,0x3f,sizeof(g));
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j){
mc[i][j]=0;
while(i+mc[i][j]<=n&&j+mc[i][j]<=m&&a[i+mc[i][j]]==b[j+mc[i][j]])++mc[i][j];
}
f1[0][0][k]=f2[0][0][k]=0;
for(int i=0;i<=n;++i)for(int j=0;j<=m;++j){
int v=mc[i+1][j+1];
if(a[i+1]==b[j+1]){
U(g[i+1][j+1],g[i][j]+1);
if(v<k){
U(f1[i+v][j+v][k-v],g[i][j]+v);
U(f2[i+v][j+v][k-v],g[i][j]+v);
}
}
U(f3[i+1][j][k],g[i][j]+1);
U(f4[i][j+1][k],g[i][j]+1);
for(int l=1;l<=k;++l){
if(v>=l){
if(l==k)U(g[i+l][j+l],f1[i][j][l]+l),U(g[i+l][j+l],f2[i][j][l]+l);
else U(f3[i+l][j+l][k-l],f1[i][j][l]+l),U(f4[i+l][j+l][k-l],f2[i][j][l]+l);
U(g[i+l][j+l],f3[i][j][l]+l);
U(g[i+l][j+l],f4[i][j][l]+l);
}else{
U(f2[i][j][l],f3[i][j][l]);
U(f1[i][j][l],f4[i][j][l]);
}
if(l==1)U(f3[i+1][j][k],f1[i][j][l]+1),U(f4[i][j+1][k],f2[i][j][l]+1);
else U(f1[i+1][j][l-1],f1[i][j][l]+1),U(f2[i][j+1][l-1],f2[i][j][l]+1);
if(l==k)U(f3[i+1][j][l],f3[i][j][l]+1),U(f4[i][j+1][l],f4[i][j][l]+1);
}
}
printf("%d\n",min({g[n][m],f1[n][m][k],f2[n][m][k],f3[n][m][k],f4[n][m][k]}));
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Memory Limit Exceeded
input:
2 abaaa babaa
output:
6