Trang 2 của 2 Đầu tiênĐầu tiên 12
Kết quả 11 đến 20 của 20
  1. #11
    Ngày tham gia
    Aug 2015
    Bài viết
    4
    ặc thuật toán thế tớ cũng đã nghĩ ra rùi nhưng viết ko dc mới nói[IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

  2. #12
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Thôi thì thế này vậy, bạn làm hộ mình bài toán của mình, mình sẽ làm hộ bài cho bạn, mình cũng đang đau đầu đây.

  3. #13
    Ngày tham gia
    Aug 2015
    Bài viết
    3
    pó hand. up hộ các pro khác nào

  4. #14
    Ngày tham gia
    Aug 2015
    Bài viết
    1,183
    Bài này có thể chia thành hai bài toán con.

    Nếu đầu mỗi xâu là số 1 thì ghi ra dạng đầy đủ của nó . Nếu bắt đầu bằng số 2 thì ghi ra xâu ngược Của xâu nhập vào như dưới kia
    Bài toán 1, tìm dạng đầy đủ của xâu, mình nghĩ là nên làm như sau:

    Chuyển xâu S cần xử lí thành xâu mới với các dấu * và + và đóng mở ngoặc như một biểu thức toán học.
    VD: A2B(C2A)2 sẽ được chuyển thành: A*2+B+(C*2+A)*2

    Sau đó ta chuyển sang kiểu kí pháp hậu tố. Ví dụ như xâu đang xét sẽ thành A2*BC2*A+2*++

    Rồi sau đó ta có thể tính một lượt từ trái sang phải mà không phải xét nhiều trường hợp lẻ tẻ nữa.

    --- Cách này làm ra thì chương trình cũng dài, nhưng được cái thuật toán lại quen thuộc [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] Nếu bạn không hiểu về kí pháp hậu tố (kí pháp Ba Lan) thì bạn có thể tìm đọc ebook của thầy Lê Minh Hoàng hoặc tìm đến với người bạn thân Google nhé [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] Cách của bạn HSG theo mình thì còn chưa rõ ràng và chưa chặt chẽ, ở đoạn xử lí dấu ngoặc, mình nói thế nếu không phải thì mong bạn bỏ quá cho [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

    Còn về bài toán thứ hai thì mình vẫn chưa hiểu rõ yêu cầu của đề lắm. Bạn có thể cho mình output của bộ dữ liệu dưới đây không??? Để mình hiểu rõ đề yêu cầu xử lí với những phần tử trong ngoặc như thế nào để mình có thể đưa ra thuật toán chính xác [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]
    Input: 2 A(C2(D(GF2)E2G)2A)2

    Bạn trả lời sớm nhé!

  5. #15
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    bài toán thứ 2 thì khi bạn đã làm được bài toán thứ 1 rồi, đảo ngược xâu lại và lại nén lại theo quy tắc, có phải thế không nhỉ?

  6. #16
    Ngày tham gia
    Aug 2015
    Bài viết
    2
    A(GE2((F2G)D)2C2)2
    Đưa ra thế này bạn ah.
    Thực sự là bài đầu rất rắc rối. Mình nghe có người nói phải dùng loang kiểu bài nuôi cá
    Còn dùng ký pháp hậu tố đó mình lại chưa thông thạo . Bạn có thể code dc ko .

  7. #17
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Kí pháp hậu tố, tiền tố, trung tố là kí pháp theo kiểu Ba Lan, những kí pháp này đều được giới thiệu rất rõ trong ebook của thày Lê Minh Hoàng, bạn tìm đọc sẽ hiểu ngay thôi, còn nói ở đây thì sẽ khá là dài dòng đấy.

  8. #18
    Ngày tham gia
    Nov 2015
    Bài viết
    0
    Tiếc thật vẫn ko có ai giải cho , Mai thi rùi . @ trunga0 có yahoo cho mình xin cái

  9. #19
    Ngày tham gia
    Aug 2015
    Bài viết
    1
    Mình nghĩ là bạn đọc ebook và tự code sẽ tốt hơn và nhớ hơn đấy. Với cả mình cũng lười code lắm, chỉ có nói thuật toán linh tinh là giỏi thôi :">

    Câu hỏi loại 1 thực ra có cách làm thô sơ hơn đó là xử lí lần lượt từng cặp dấu ngoặc một. Tức là bạn sẽ duyệt xâu từ trái sang phải, thấy dấu mở ngoặc thì tìm dấu đóng ngoặc tương ứng với nó rồi xử lí (nhân lên bao nhiêu lần đó). Sau khi xử lí xong lại bắt đầu lại quá trình cho đến khi không còn dấu ngoặc nào nữa. Lúc này thì dễ rồi nhỉ [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

    Mình lấy ví dụ luôn cho bạn dễ hiểu nhé, nó là thế này:

    Xâu ban đầu: A2B(C2(B2E)3A)2
    Sau lần xử lí đầu tiên: A2B(C2(B2E)3A)2 -> A2BC2(B2E)3AC2(B2E)3A
    Sau lần xử lí thứ hai: A2BC2(B2E)3AC2(B2E)3A -> A2BC2B2EB2EB2EAC2(B2E)3A
    Sau lần xử lí thứ ba: A2BC2B2EB2EB2EAC2(B2E)3A -> A2BC2B2EB2EB2EAC2B2EB2EB2EA
    Lần cuối cùng, khi đã không còn dấu ngoặc thì đơn giản rồi nhé!


    Mà YM của mình là truelove_bluesky. Có gì bạn cứ add vào rồi mình trao đổi nhé!

  10. #20
    Ngày tham gia
    Apr 2016
    Bài viết
    0
    Code của mình đây, các bạn tìm thử xem còn bug nào không nhé [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG] Chương trình mình dài là vì mình xử lí cả những TH số có nhiều hơn 1 chữ số.

    VD: 1 A11B(C12E)100 thì phải viết thế này mới chạy đúng đc [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]

    Mà mình viết trên FreePascal nên chỉ chạy đc trên FreePascal thôi, TurboPascal chưa chắc đã chạy được đâu [IMG]data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAA l21bKAAAAA1BMVEXh5PJm+yKVAAAAAXRSTlMAQObYZgAAAApJR EFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII=[/IMG]



    //type
    // ansistring = string;

    var
    S : ansistring;

    function number( p: longint): string;
    var temp :string;
    begin
    temp:= '';
    while (p <= length(s) ) and (S[p] in ['0'..'9']) do
    begin
    temp:=temp + S[p];
    inc(p);
    end;
    exit(temp);
    end;

    function xau_nguoc(x: string) :string;
    var i : longint;
    ch : char;
    begin
    for i:=1 to (length(x) div 2) do
    begin
    ch:= x;
    x:= x[length(x)+1-i];
    x[length(x)+1-i] := ch;
    end;
    exit(x);
    end;

    procedure solve1;
    var p,q,deg,t,z : longint;
    temp,nb : string;
    begin
    delete(S, 1, 2);
    while ( pos('(', S) > 0 ) do
    begin
    deg:=1; p:=pos('(', S); q:=p;
    while deg > 0 do
    begin
    inc(q);
    if S[q] = '(' then
    inc(deg);
    if S[q] = ')' then
    dec(deg);
    end;
    temp:=copy(S, p+1, q-p-1);
    //val(S[q+1], t, z);
    nb:=number(q+1);
    val(nb, t, z);
    delete(S, p, q-p+1+length(nb));
    for z:=1 to t do
    insert(temp, S, p);
    end;
    //
    temp:='';
    for p:=1 to length(S)-1 do
    begin
    if S[p] in ['0'..'9'] then
    continue;
    q:=p+1;
    if S[q] in ['0'..'9'] then
    begin
    nb:=number(q);
    val(nb, t, z);
    for z:=1 to t do
    temp:=temp+S[p]
    end
    else
    temp:=temp+S[p]
    end;
    if not (S[length(S)] in ['0'..'9']) then
    temp:=temp+S[length(S)];
    writeln(temp);
    end;

    function find_bracket : longint;
    var p : longint;
    begin
    for p:= length(S) downto 1 do
    if S[p] = ')' then
    exit (p);
    exit(0);
    end;

    procedure solve2;
    var p,q,deg,t,z : longint;
    temp,nb : string;
    begin
    delete(S, 1, 2);
    repeat
    q:= find_bracket;
    if q=0 then
    break;
    //
    deg := -1; p:=q;
    while deg < 0 do
    begin
    dec(p);
    if S[p] = '(' then
    inc(deg);
    if S[p] = ')' then
    dec(deg);
    end;
    //
    S[p]:= '[';
    S[q]:= ']';
    nb:=number(q+1);
    nb:=xau_nguoc(nb);
    delete(S, q+1, length(nb));
    insert(' '+nb, S, p);
    until false;
    //
    temp:='';
    for p:=2 to length(S) do
    begin
    if (S[p] in ['0'..'9']) and (S[p-1]<> ' ') then
    begin
    nb:=number(p);
    nb:=xau_nguoc(nb);
    delete(S, p, length(nb));
    insert(nb, S, p-1);
    end;
    end;
    //
    temp:= xau_nguoc(S);
    S:='';
    for z:=1 to length(temp) do
    case temp[z] of
    '[': S:= S+')';
    ']': S:= S+'(';
    ' ': continue;
    else
    S:= S+temp[z];
    end;

    writeln(S);
    end;

    BEGIN
    write('S= ');
    readln(S);
    //
    if S[1] = '1' then
    solve1
    else
    solve2;
    readln;
    END.

Trang 2 của 2 Đầu tiênĐầu tiên 12

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •