QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#393617#850. Edit Distance Yet AgainfantisAC ✓912ms45072kbC++142.4kb2024-04-18 21:49:062024-04-18 21:49:07

Judging History

你现在查看的是最新测评结果

  • [2024-04-18 21:49:07]
  • 评测
  • 测评结果:AC
  • 用时:912ms
  • 内存:45072kb
  • [2024-04-18 21:49:06]
  • 提交

answer

#include<bits/stdc++.h>//0xnnb
using namespace std;
typedef long long ll;
typedef double db;
int read(){
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9'){
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
const int N=1000005,K=1005;
const ll mod=1e9+7,P=233;
int T,n,m,k,dp[K][K*2],pre[K][K*2],ans;
char a[N],b[N];
ll power[N],hasha[N],hashb[N];
void gethash(){
	for(int i=1;i<=n;i++){
		hasha[i]=(hasha[i-1]*P+(a[i]-'a'))%mod;
	}
	for(int i=1;i<=m;i++){
		hashb[i]=(hashb[i-1]*P+(b[i]-'a'))%mod;
	}
}
bool check(int la,int lb,int len){
	ll xa=(hasha[la+len]-hasha[la]*power[len]%mod+mod)%mod;
	ll xb=(hashb[lb+len]-hashb[lb]*power[len]%mod+mod)%mod;
	return xa==xb;
}
int erfen(int la,int lb){
	int l=0,r=min(n-la,m-lb),ans=l;
	while(l<=r){
		int mid=(l+r)>>1;
		if(check(la,lb,mid)){
			ans=mid,l=mid+1;
		}
		else r=mid-1;
	}
	return ans;
}
void solve(int x,int y){
	if(!x)return;
	int yy=pre[x][y+k];
	solve(x-1,yy);
	int pos=dp[x-1][yy+k]+yy;
	if(y>yy){
		printf("INSERT %d %c\n",pos+1,b[pos+1]);
	}
	else if(y<yy){
		printf("DELETE %d\n",pos+1);
	}
	else{
		printf("REPLACE %d %c\n",pos+1,b[pos+1]);
	}
}
int main(){
	power[0]=1;
	for(int i=1;i<=1000000;i++){
		power[i]=power[i-1]*P%mod;
	}
    T=read();
    for(int TT=1;TT<=T;TT++){
    	n=read(),m=read(),k=read();
    	scanf("%s%s",a+1,b+1);
    	if(abs(n-m)>k){
    		printf("NO\n");
			continue; 
		}
    	gethash();
    	for(int i=0;i<=k;i++){
    		for(int j=-k;j<=k;j++){
    			dp[i][j+k]=-1;
			}
		}
		dp[0][k]=0;
		ans=-1;
		for(int i=0;i<=k;i++){
			for(int j=-k;j<=k;j++){
				if(dp[i][j+k]==-1)continue;
				int tmp=dp[i][j+k];
				dp[i][j+k]=tmp+erfen(tmp,tmp+j);
				tmp=dp[i][j+k];
				if(i==k)continue;
				if(j!=k&&tmp+j+1<=m){
					if(tmp>dp[i+1][j+1+k]){
						dp[i+1][j+1+k]=tmp;
						pre[i+1][j+1+k]=j;
					}
				}
				if(j!=-k&&tmp+1<=n){
					if(tmp+1>dp[i+1][j-1+k]){
						dp[i+1][j-1+k]=tmp+1;
						pre[i+1][j-1+k]=j;
					}
				}
				if(tmp+1<=n&&tmp+j+1<=m){
					if(tmp+1>dp[i+1][j+k]){
						dp[i+1][j+k]=tmp+1;
						pre[i+1][j+k]=j;
					}
				}
			}
			if(dp[i][m-n+k]==n){
				ans=i;
				break;
			}
		}
		if(ans==-1){
			printf("NO\n");
			continue;
		}
		printf("YES\n%d\n",ans);
		solve(ans,m-n);
	}
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 0ms
memory: 16212kb

input:

2
3 4 3
kot
plot
5 7 3
zycie
porazka

output:

YES
2
REPLACE 1 p
INSERT 2 l
NO

result:

ok OK!

Test #2:

score: 0
Accepted
time: 8ms
memory: 18232kb

input:

100
100 100 0
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
16 7 100
vvvvvvvvvvvvvvvv
qydopaq
37 33 43
ggggggggggggggggggggggggggggggggggggg
osk...

output:

YES
0
YES
16
DELETE 1
DELETE 1
DELETE 1
DELETE 1
DELETE 1
DELETE 1
DELETE 1
DELETE 1
DELETE 1
REPLACE 1 q
REPLACE 2 y
REPLACE 3 d
REPLACE 4 o
REPLACE 5 p
REPLACE 6 a
REPLACE 7 q
YES
28
REPLACE 1 o
REPLACE 2 s
REPLACE 3 k
REPLACE 5 m
REPLACE 6 l
REPLACE 8 j
REPLACE 9 t
REPLACE 10 u
REPLACE 11 a
REPLA...

result:

ok OK!

Test #3:

score: 0
Accepted
time: 547ms
memory: 30884kb

input:

100
3211 3185 685
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww...

output:

YES
552
REPLACE 4 i
REPLACE 16 b
REPLACE 17 s
REPLACE 20 u
REPLACE 29 j
REPLACE 31 b
REPLACE 33 z
REPLACE 39 l
REPLACE 67 l
REPLACE 68 s
REPLACE 70 i
REPLACE 73 p
REPLACE 91 g
REPLACE 101 x
REPLACE 111 y
REPLACE 113 x
REPLACE 115 s
REPLACE 117 f
REPLACE 121 m
REPLACE 123 a
REPLACE 130 h
REPLACE 132 ...

result:

ok OK!

Test #4:

score: 0
Accepted
time: 697ms
memory: 44984kb

input:

5
999000 998976 995
llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll...

output:

YES
894
REPLACE 1682 u
REPLACE 2752 y
REPLACE 2983 z
REPLACE 4433 b
REPLACE 7318 m
REPLACE 8237 b
REPLACE 8898 n
REPLACE 9049 m
REPLACE 9504 n
REPLACE 9903 n
REPLACE 13572 q
REPLACE 14221 v
REPLACE 14615 y
REPLACE 16903 j
REPLACE 17197 e
REPLACE 18073 v
REPLACE 19408 b
REPLACE 20512 p
REPLACE 21033 ...

result:

ok OK!

Test #5:

score: 0
Accepted
time: 793ms
memory: 44936kb

input:

5
999000 998971 1000
lllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll...

output:

NO
NO
NO
NO
NO

result:

ok OK!

Test #6:

score: 0
Accepted
time: 234ms
memory: 45036kb

input:

5
1000000 1000000 1000
faafaffaaffafaafaffafaaffaafaffaaffafaaffaafaffafaafaffaaffafaafaffafaaffaafaffafaafaffaaffafaaffaafaffaaffafaafaffafaaffaafaffaaffafaaffaafaffafaafaffaaffafaaffaafaffaaffafaafaffafaaffaafaffafaafaffaaffafaafaffafaaffaafaffaaffafaaffaafaffafaafaffaaffafaafaffafaaffaafaffafaafa...

output:

YES
246
INSERT 1 a
REPLACE 3 f
INSERT 7 a
INSERT 13 a
INSERT 15 f
INSERT 25 a
INSERT 27 f
INSERT 29 f
INSERT 31 a
INSERT 49 a
INSERT 51 f
INSERT 53 f
INSERT 55 a
INSERT 57 f
INSERT 59 a
INSERT 61 a
INSERT 63 f
INSERT 97 a
REPLACE 99 f
INSERT 103 a
DELETE 109
REPLACE 111 f
DELETE 114
INSERT 129 f
REP...

result:

ok OK!

Test #7:

score: 0
Accepted
time: 912ms
memory: 45072kb

input:

5
999900 999925 992
ejqwvowvntrtmokrfeqeybcvgsupftozhkdsyytrioxrzbahikexefgyhpwbcztcydqiibxukojvgedldgmjufkzwttpvftctkpajgpwiklfzrkjxzsltqdbfdyxqpswrrlkdbmwckbhbfpqqgnhcixcnmphjulyykqfvdrqsdskbxqlqvekhwmvzmtqannmxrjgqcpdpofmqozyicaiqjikqxkeolandjydgvtjhnzubpdtkxymaxffnopnnrpnedobnfljcvtqwmuxdctutidm...

output:

YES
938
DELETE 1984
DELETE 2243
INSERT 4441 b
DELETE 5841
DELETE 6398
INSERT 6785 b
REPLACE 6948 t
INSERT 6988 g
REPLACE 7101 b
INSERT 7373 b
DELETE 10782
INSERT 12028 g
REPLACE 13721 g
INSERT 14908 t
DELETE 14925
INSERT 15582 b
REPLACE 17831 b
INSERT 19811 b
DELETE 22361
REPLACE 22445 t
INSERT 2508...

result:

ok OK!