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.