Hướng dẫn giải của Hiệu chỉnh văn bản
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Lưu ý: Các code mẫu dưới đây chỉ mang tính tham khảo và có thể không AC được bài tập này
Code mẫu của flashmt
var n,kq:byte; a,b:string; procedure re; begin readln(n); readln(a); readln(b); end; procedure pr; var la,i,j,k:byte; kt:boolean; c:string; begin kq:=0; repeat kt:=false; la:=length(a); for i:=la downto n do begin for j:=1 to la-i+1 do begin c:=copy(a,j,i); k:=pos(c,b); if k>0 then begin inc(kq); kt:=true; delete(b,k,i); delete(a,j,i); end; if kt then break; end; if kt then break; end; until not kt; end; procedure wr; begin writeln(kq); writeln(a); write(b); end; begin re; pr; wr; end.
Code mẫu của happyboy99x
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; char s[51], p[51], t[51]; int k; int main() { scanf("%d%s%s",&k,s,p); int res = 0; for(bool stop = false; !stop; ) { stop = true; for(int l = min(strlen(s), strlen(p)), cont = true; l >= k && cont; --l) { for(int n = strlen(s), i = 0; i <= n - l; ++i) { strncpy(t, s+i, l); t[l] = 0; char * tmp = strstr(p, t); if(tmp != NULL) { strcpy(s+i, s+i+l); strcpy(tmp, tmp+l); cont = stop = false; ++res; break; } } } } printf("%d\n%s\n%s\n", res, s, p); return 0; }
Code mẫu của ladpro98
program nkedit; uses math; const fi=''; var a,b:string; k,res:longint; procedure input; var f:text; begin assign(f,fi); reset(f); readln(f,k); readln(f,a); readln(f,b); close(f); end; procedure process; var i,j,startA,startB,maxL,s,t:longint; begin res:=0; repeat maxL:=0; for i:=1 to length(a) do begin for t:=1 to length(b) do begin s:=t; j:=t; while (j<=length(b)) and (i+j-t<=length(a)) and (b[j]=a[i+j-t]) do inc(j); if maxL<(j-s) then begin maxL:=j-s; startA:=i; startB:=s; end; end; end; if maxL<k then break; inc(res); delete(a,startA,maxL); delete(b,startB,maxL); until maxL<k; end; begin input; process; writeln(res); writeln(a); writeln(b); end.
Code mẫu của RR
{$R+,Q+} uses math; const FINP=''; FOUT=''; MAXN=51; var x,y,count,k:longint; s1,s2:string; f1,f2:text; procedure openF; begin assign(f1,FINP); reset(f1); assign(f2,FOUT); rewrite(f2); end; procedure closeF; begin close(f1); close(f2); end; procedure inp; begin readln(f1,k); readln(f1,s1); x:=length(s1); readln(f1,s2); y:=length(s2); end; procedure ans; begin writeln(f2,count); writeln(f2,s1); writeln(f2,s2); end; function find(var start1,start2:longint):longint; var i,j,ln,l,u,v:longint; begin ln:=-1; for u:=1 to x do for v:=1 to y do begin i:=u; j:=v; l:=0; while (i<=x) and (j<=y) and (s1[i]=s2[j]) do begin inc(l); inc(i); inc(j); end; if l>ln then begin ln:=l; start1:=u; start2:=v; end; end; find:=ln; end; procedure solve; var ln,i,j:longint; begin count:=0; ln:=find(i,j); while ln>=k do begin inc(count); delete(s1,i,ln); delete(s2,j,ln); x:=length(s1); y:=length(s2); ln:=find(i,j); end; end; begin openF; inp; solve; ans; closeF; end.
Code mẫu của hieult
#include <stdio.h> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> //#include <conio.h> using namespace std; void FailureFunction(char P[],int F[],int m) { int i,j; F[0] = 0; j = 0; i = 1; while(i<m) { if(P[i] == P[j]) { F[i] = j+1; i++; j++; } else if(j>0) j = F[j-1]; else { F[i] = 0; i++; } } } int KMP(int n,char T[],int m, char P[]) { int i,j,F[100]; FailureFunction(P,F,m); i = 0; j = 0; while(i<n) { if(T[i] == P[j]) { if(j == m-1) return i-j; else { i++; j++; } } else if(j>0) j = F[j-1]; else i++; } return -1; } int main() { // freopen("NKEDIT.in","r",stdin); int k,n,m,chay=0; char s[52],p[52],the[52]; scanf("%d",&k); scanf("%s %s",s,p); n = strlen(s); m = strlen(p); while(true) { int flag = 0; for(int i = n;i>=k;i--) { for(int j = 0;j<=n-i;j++) { for(int k = 0;k<=i-1;k++) the[k] = s[k+j]; int pos = KMP(m,p,i,the); if(pos!=-1) { chay++; flag = 1; for(int k = j;k<=n-i-1;k++) s[k] = s[k+i]; for(int k = pos;k<=m-i-1;k++) p[k] = p[k+i]; n = n-i; m = m-i; } if( flag ==1) break; } if(flag == 1) break; } if(flag ==0) break; } printf("%d\n",chay); for(int i = 0;i<n;i++) printf("%c",s[i]); printf("\n"); for(int i = 0;i<m;i++) printf("%c",p[i]); //getch(); }
Code mẫu của ll931110
Program NKEDIT; Const input = ''; output = ''; Var k,count: integer; s1,s2: string; Procedure init; Var f: text; Begin Assign(f, input); Reset(f); Readln(f, k); Readln(f, s1); Readln(f, s2); Close(f); End; Procedure solve; Var i,j,pos1,pos2,num: integer; max,max1,max2: integer; Begin count:= 0; Repeat max:= 0; For i:= 1 to length(s1) do For j:= 1 to length(s2) do if s1[i] = s2[j] then Begin pos1:= i; pos2:= j; num:= 1; While (pos1 < length(s1)) and (pos2 < length(s2)) do Begin inc(pos1); inc(pos2); If s1[pos1] = s2[pos2] then inc(num) else break; End; If s1[pos1] <> s2[pos2] then Begin dec(pos1); dec(pos2); End; If max < num then Begin max:= num; max1:= pos1 - max + 1; max2:= pos2 - max + 1; End; End; If max < k then break; inc(count); Delete(s1, max1, max); Delete(s2, max2, max); Until false; End; Procedure printresult; Var f: text; Begin Assign(f, output); Rewrite(f); Writeln(f, count); Writeln(f, s1); Writeln(f, s2); Close(f); End; Begin init; solve; printresult; End.
Code mẫu của skyvn97
program NKEDIT; uses crt; var s,p:string; c,k:integer; f:array [1..50,1..50] of integer; procedure init; begin readln(k); readln(s); readln(p); c:=0; end; procedure process; var i,j,max,wi,wj:integer; begin repeat max:=-1; for i:=1 to length(s) do if s[i]=p[1] then f[i][1]:=1 else f[i][1]:=0; for i:=1 to length(p) do if s[1]=p[i] then f[1][i]:=1 else f[1][i]:=0; for i:=2 to length (s) do for j:=2 to length(p) do if s[i]=p[j] then f[i][j]:=f[i-1][j-1]+1 else f[i][j]:=0; for i:=1 to length(s) do for j:=1 to length(p) do if f[i][j]>max then begin max:=f[i][j]; wi:=i-max+1; wj:=j-max+1; end; if max>=k then begin delete(s,wi,max); delete(p,wj,max); inc(c); end; until max<k; end; procedure print; begin writeln(c); writeln(s); writeln(p); end; begin init; process; print; readln; end.
Bình luận