QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#571247#810. PlagiarismC1942huangjiaxuML 0ms0kbC++141.5kb2024-09-17 21:25:402024-09-17 21:25:41

Judging History

This is the latest submission verdict.

  • [2024-09-17 21:25:41]
  • Judged
  • Verdict: ML
  • Time: 0ms
  • Memory: 0kb
  • [2024-09-17 21:25:40]
  • Submitted

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;
}

详细

Test #1:

score: 0
Memory Limit Exceeded

input:

2
abaaa
babaa

output:

6

result: