Mật hiệu ban đầu của tổ chức tình báo XSPIDER là một xâu K kí tự S = S1S2…SK chỉ chứa các kí tự chữ cái Latin thường. Để đảm bảo tính bảo mật của mật hiệu, mật hiệu sẽ được thay đổi mỗi ngày. Giám đốc của XSPIDER mỗi ngày sẽ gửi cho các nhân viên một số nguyên X với hàm ý: đảo ngược các kí tự trong mật hiệu hiện tại từ kí tự thứ X đến kí tự thứ K-X+1 để được mật hiệu mới. (ví dụ mật hiệu hiện tại là ‘abcdefgh’, và số X nhận được là 2 thì mật khẩu mới là ‘agfedcbh’). Sau M ngày hoạt động, giám đốc chỉ lưu lại dãy M con số đã chuyển cho các nhân viên lần lượt là X1,X2,…,XM với suy nghĩ có dãy số này Ông ta sẽ dễ dàng có được mật hiệu của ngày thứ M. Thật không may là số ngày M quá lớn, Ông mất quá nhiều thời gian để tìm ra mật hiệu đó. Bạn hãy viết chương trình giúp Ông ta tìm mật hiệu đó. Dữ liệu vào: cho trong tệp MATHIEU.INP có cấu trúc như sau: - Dòng thứ nhất ghi xâu mật hiệu ban đầu S1S2…SK (2 ≤ K ≤ 2.10^5) - Dòng thứ hai chứa số ngày M (1 ≤ M ≤ 10^5) - Dòng tiếp theo chứa dãy M số X1,X2,…,XM (1 ≤ Xi, 2.Xi ≤ K với mọi i từ 1 đến M) Dữ liệu ra: ghi vào tệp MATHIEU.OUT xâu mật hiệu hiện tại sau M ngày. Ví dụ: MATHIEU.INP MATHIEU.OUT abcdefgh hbfedcga 3 2 1 3 PASCAL GIẢI THÍCH Ý TƯỞNG CÁCH LÀM LUÔN NHA MƠN Ạ

1 câu trả lời

uses crt;
var s: ansistring;
    p: array[0..100000] of longint;
    i, a, m: longint;

procedure swap(var a, b: char);
var tmp:char;
begin
    tmp:=a; a:=b; b:=tmp;
end;

begin
    clrscr;
    readln(s);
    readln(m);
    while m > 0 do begin
        read(a);
        inc(p[a]);
        dec(m);
    end;
    for i:=1 to length(s) div 2 do inc(p[i], p[i - 1]);
    for i:=1 to length(s) div 2 do
        if p[i] mod 2 <> 0 then swap(s[i], s[length(s) - i + 1]);
    writeln(s);
readln;
end.