Hướng dẫn giải của Tách Từ


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.

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 a,b,c:string;
    la,lb,lc:byte;
    d,e:array[0..200] of byte;

procedure rf;
begin
     readln(a); la:=length(a);
     readln(b); lb:=length(b);
     readln(c); lc:=la+lb;
end;

procedure att(i:byte);
var j,k,q:byte;
begin
     if i>la then exit;
     for j:=e[i-1]+1 to lc do
         if c[j]=a[i] then
         begin
              d[j]:=1;
              e[i]:=j;
              if i=la then
              begin
                   q:=1;
                   for k:=1 to lc do
                       if (d[k]=0) then
                       begin
                            if c[k]=b[q] then inc(q)
                            else break;
                       end;
                   if q=lb+1 then
                   begin
                        for k:=1 to lc do write(2-d[k]);
                        halt;
                   end;
              end;
              att(i+1);
              d[j]:=0;
              e[i]:=0;
         end;
end;

procedure pr;
begin
     fillchar(d,sizeof(d),0);
     fillchar(e,sizeof(e),0);
     att(1);
end;

begin
     rf;
     pr;
end.

Code mẫu của happyboy99x

#include <algorithm>
#include <bitset>
#include <cctype>
#include <cfloat>
#include <climits>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <deque>
#include <functional>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <utility>
#include <vector>
using namespace std;

typedef pair<int, int> ii;
typedef vector<ii> vii;
typedef vector<vii> vvii;
typedef vector<int> vi;
typedef vector<vi> vvi;

#define sz(a) int((a).size())
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define all(c) (c).begin(), (c).end()
#define tr(c,i) for(typeof((c).begin()) i = (c).begin(), _e = (c).end(); i != _e; ++i)
#define present(c,x) ((c).find(x) != (c).end())
#define cpresent(c,x) (find(all(c),x) != (c).end())
#define rep(i,n) for(int i = 0, _n = (n); i < _n; ++i)
#define repd(i,n) for(int i = (n)-1; i >= 0; --i )
#define fo(i,a,b) for(int i = (a), _b = (b); i <= _b; ++i)
#define fod(i,a,b) for(int i = (a), _b = (b); i >= _b; --i)

#define INF 1000000000
#define N 105

char a[N], b[N], c[N+N], res[N+N]; int n;

void btrk(int i, int j, int k) {
    if(i == n) { puts(res); exit(0); }
    if(c[i] == a[j]) { res[i] = 0x31; btrk(i+1,j+1,k); }
    if(c[i] == b[k]) { res[i] = 0x32; btrk(i+1,j,k+1); }
}

int main() {
#ifndef ONLINE_JUDGE
    freopen( "input.txt", "r", stdin );
    //freopen( "output.txt", "w", stdout );
#endif
    scanf("%s%s%s",a,b,c); n = strlen(c);
    btrk(0,0,0);
    return 0;
}

Code mẫu của ladpro98

program nkh;
uses    math;
const   maxN=201;
        fi='';
var     r:array[1..maxN] of longint;
        a,b,s:string;

procedure input;
var     inp:text;
begin
        assign(inp,fi);
        reset(inp);
        readln(inp,a);
        readln(inp,b);
        readln(inp,s);
        close(inp);
end;

procedure output;
var     i:longint;
begin
        for i:=1 to length(s) do
        write(r[i]);
end;

procedure back(k,i,j:longint);
begin
        if k>length(s) then
        begin
                output;
                halt;
        end;
        if s[k]=a[i] then
        begin
                r[k]:=1;
                back(k+1,i+1,j);
        end;

        if s[k]=b[j] then
        begin
                r[k]:=2;
                back(k+1,i,j+1);
        end;
end;



begin
        input;
        back(1,1,1);


end.

Code mẫu của RR

//Written by Nguyen Thanh Trung
{$R+,Q+}
{$Mode objFPC}
uses math;
const
  FINP          =       '';
  FOUT          =       '';
  MAXN          =       222;
var
  f1,f2         :       text;
  l,l1,l2       :       longint;
  s,s1,s2       :       string;
  f             :       array[1..MAXN,1..MAXN,1..MAXN] of boolean;

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,s1); l1:=length(s1);
      readln(f1,s2); l2:=length(s2);
      readln(f1,s);  l :=length(s );
    end;
procedure solve;
    var
      i,j1,j2:longint;
    begin
      fillchar(f,sizeof(f),false);
      f[l+1,l1+1,l2+1]:=true;
      for i:=l downto 1 do
      for j1:=l1+1 downto 1 do
      for j2:=l2+1 downto 1 do
        f[i,j1,j2]:= (f[i+1,j1+1,j2] and (s[i]=s1[j1]))
                  or (f[i+1,j1,j2+1] and (s[i]=s2[j2]));
    end;
procedure ans;
    var
      i,j1,j2:longint;
    begin
      j1:=1; j2:=1;
      for i:=1 to l do
        if (s1[j1]=s[i]) and f[i+1,j1+1,j2] then
          begin
            write(f2,'1');
            inc(j1);
          end
        else
          begin
            write(f2,'2');
            inc(j2);
          end;
    end;

begin
  openF;
  inp;
  solve;
  ans;
  closeF;
end.

Code mẫu của hieult

#include<cstdio>
#include<cmath>
#include<math.h>
#include<cstring>
#include<cstdlib>
#include<cassert>
#include<ctime>
#include<algorithm>
#include<iterator>
#include<iostream>
#include<cctype>
#include<string>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<list>
#define ep 0.00001
#define maxn 100111
#define oo 1111111111
#define modunlo 35000
#define mod 256
#define TR(c, it) for(typeof((c).begin()) it=(c).begin(); it!=(c).end(); it++)
//#define g 9.81
double const PI=4*atan(1.0);

//#include<conio.h>

using namespace std;

typedef pair<int, int> II;
typedef vector<int> VI;
typedef vector<II> VII;
typedef vector<VI> VVI;
typedef vector<VII> VVII;

int x;
string s1,s2,S;
int f[222][222];
vector<int> V;

int main(){
   //  freopen("input.in","r",stdin);
   // freopen("output.out","w",stdout);
     memset(f,0,sizeof(f));
     cin>>s1>>s2>>S;
     int n = s1.length(), m = s2.length();
     //cout<<s1<<endl<<s2<<endl<<S<<endl;
     f[0][0] = 1;
     for(int i = 0;i<=n;i++)
          for(int j = 0;j<=m;j++){
                if(i==0 && j==0);// continue;
                else if(i==0){
                     if(s2[j-1]==S[j-1] && f[0][j-1]!=0)
                          f[0][j] = 2;
                }
                else if(j==0){
                     if(s1[i-1]==S[i-1] && f[i-1][0]!=0)
                           f[i][0] = 1;
                }
                else{
                     if(s2[j-1]==S[i+j-1] && f[i][j-1]!=0){
                         f[i][j] = 2;
                     }
                     else if(s1[i-1]==S[i+j-1] && f[i-1][j]!=0){
                         f[i][j] = 1;
                        // continue;
                     }
                     /*
                     else if(s2[j-1]==S[i+j-1] && f[i][j-1]!=0){
                         f[i][j] = 2;
                     }
                     */

                }
            //  printf("%d %d %d\n",i,j,f[i][j]);

          }

     int u = n, v = m;
     while(u>0||v>0){
           V.push_back(f[u][v]);
           if(f[u][v]==1) u--;
           else v--;
     }
     for(int i = V.size()-1;i>=0;i--) printf("%d",V[i]);
}

Code mẫu của khuc_tuan

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] a = sc.nextLine().toCharArray();
        char[] b = sc.nextLine().toCharArray();
        char[] c = sc.nextLine().toCharArray();
        String[][] F = new String[a.length + 1][b.length + 1];
        for (int i = 0; i <= a.length; ++i)
            for (int j = 0; j <= b.length; ++j) {
                if (i == 0 && j == 0)
                    F[i][j] = "";
                else {
                    if (i > 0 && F[i - 1][j] != null
                            && c[i + j - 1] == a[i - 1])
                        F[i][j] = F[i - 1][j] + "1";
                    if (j > 0 && F[i][j - 1] != null
                            && c[i + j - 1] == b[j - 1])
                        F[i][j] = F[i][j - 1] + "2";
                }
            }
        System.out.println(F[a.length][b.length]);
    }
}

Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.