P153PROI PTIT spoj – Mã hóa xâu

Nguồn đề bài: http://www.spoj.com/PTIT/problems/P153PROI/

1. Đề bài P153PROI PTIT spoj

Tí đang tìm hiểu một trong những kĩ thuật mật mã hóa đơn giản nhất. Với bản tin cần được mã hóa, phương pháp này được sẽ mã hóa thành một xâu với quy tắc như sau:

Xâu mã hóa chỉ lưu lại các kí tự chữ cái xuất hiện đầu tiên. Nói cách khác, các kí tự nào xuất hiện > 1 lần trở lên, sẽ bị xóa bỏ, chỉ giữ lại kí tự đầu tiên.

Giá trị mật mã của xâu được tính bằng tổng số lần xuất hiện của các kí tự có tần suất > 1 lần.

Các bạn hãy cùng Tí giải quyết bài toán này nhé!

Input

Dòng đầu tiên gồm số lượng test T (T <= 100).

T dòng tiếp theo, mỗi dòng gồm nhiều chuỗi các kí tự, có tổng độ dài không vượt quá 10^5.

Các kí tự là chữ cái in hoa hoặc chữ cái thường.

Output

Với mỗi test, in ra trên dòng số các giá trị mật mã của xâu, và xâu đó sau khi được mã hóa.

Example

Input:
3
Posts and Telecommunications Institute of Technology
i am a man
google

Output:
41 postandelcmuifhgy
5 iamn
4 gole

2. Hướng dẫn P153PROI PTIT spoj

– Bài này yêu cầu sao thì làm đó.

– lưu ý các câu : “các kí tự nào xuất hiện > 1 lần trở lên, sẽ bị xóa bỏ, chỉ giữ lại kí tự đầu tiên.”, “tần suất > 1 lần.”,..

– Bài này nó nhập in hay thường thì đều phải chuyển về chữ thường.

– lưu ý một số bạn bị sai mặc dù đúng test mẫu là do giá trị mật mã của xâu có thể nói, việc không kiểm soát khoảng trắng sẽ gây ra sai kết quả đó.

3. code tham khảo P153PROI PTIT spoj

const   fi='';
        nmax=100000;
type    data=longint;
var
        f:text;
        TEST:data;
        s,kq:ansistring;
        dd:array['A'..'z'] of data;

procedure xuli;
var     i,j,res:data;
        c:char;
begin
        res:=0;
        fillchar(dd,sizeof(dd),0);

        s:=upcase(s);
        for i:=1 to length(s) do
                if s[i] in ['A'..'Z'] then
                        s[i]:=chr(ord(s[i])+32);

        for i:=1 to length(s) do
                if s[i]<>' ' then
                        inc(dd[s[i]]);

        res:=0;
        for c:='A' to 'z' do
                if dd[c]>1 then
                        inc(res,dd[c]);
        write(res,' ');
        fillchar(dd,sizeof(dd),0);
        for i:=1 to length(s) do
                if (s[i]<>' ') and (dd[s[i]]=0) then
                        begin
                                dd[s[i]]:=1;
                                write(s[i]);
                        end;
        writeln;
end;

procedure docfile;
var
        i:data;
begin
        assign(f,fi); reset(f);
        readln(f,test);
        for i:=1 to test do
                begin
                        readln(f,s);
                        xuli;
                end;
        close(f);
end;

begin
        docfile;
end.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *