description
oliver為了學號英語決定苦背單詞,但很快他發現要直接記住雜亂無章的單詞非常困難,他決定對單詞進行分類。
兩個單詞可以分為一類當且僅當組成這兩個單詞的各個字母的數量均相等。
例如「aabac」,它和「cbaaa」就可以歸為一類,而和「aaabb」就不是一類。
現在oliver有n個單詞,所有單詞均由大寫字母組成,每個單詞的長度不超過100.你要告訴oliver這些單詞會被分成幾類。
input
輸入檔案的第一行為單詞個數n,以下n行每行為乙個單詞。
output
輸出檔案僅包含乙個數,表示這n個單詞分成的類數。
題解 我就是豬,不知道字串也可以快排。然後暴力。
**
var
n:longint;
s:array[1..100000] of
string;
a:string;
procedure
qsort
(l,r:longint);
var i,j:longint;
mid:string;
p:char;
begin
i:=l;j:=r;
mid:=a[(l+r) div
2]; repeat
while a[i]do inc(i);
while a[j]>mid do dec(j);
if i=j then
begin inc(i);dec(j);end
else
if ithen
begin
p:=a[i];a[i]:=a[j];a[j]:=p;
inc(i);dec(j);
end;
until i>j;
if lthen qsort(l,j);
if ithen qsort(i,r);
end;
procedure
qsort1
(l,r:longint);
var i,j:longint;
mid,p:string;
begin
i:=l;j:=r;
mid:=s[(l+r) div
2]; repeat
while s[i]do inc(i);
while s[j]>mid do dec(j);
if i<=j then
begin
p:=s[i];s[i]:=s[j];s[j]:=p;
inc(i);dec(j);
end;
until i>j;
if lthen qsort1(l,j);
if ithen qsort1(i,r);
end;
var i,j,ans:longint;
begin
readln(n);
for i:=1
to n do
begin
readln(a);
qsort(1,length(a));
s[i]:=a;
end;
qsort1(1,n);
j:=1;ans:=1;
for i:=2
to n do
if s[i]<>s[i-1] then inc(ans);
writeln(ans);
end.
素數密度 Standard IO
description 給定區間 l,r l r 2147483647,r l 1000000 請計算區間中素數的個數。input 兩個數l和r output 一行,區間中素數的個數。題解看到題目,很水啊。但一看到l,r的範圍,太恐怖了!資料範圍之大,所以不能乙個乙個列舉,用篩素來快速求出素數。因為...
最小最大和 Standard IO
description alice和bob在玩乙個遊戲,每一輪bob都會給alice兩個整數a和b 1 a,b 100 alice每一輪必須把目前所有的a序列和b序列中的數一一配對,每個數必須用且只使用一次,要求最大和最小。題解數值大小比較小,用乙個陣列統計,再用桶優化,暴力 沒了。var i,j,...
2032 數字遊戲 Standard IO
fj和他的奶牛們喜歡玩一種數字遊戲 他們按某種順序在紙上寫下1 n 1 n 10 之間的所有數,然後把相鄰的數字相加,得到乙個比原數列少一項的數列。對新數列重複上述的操作,直到整個數列只剩乙個數為止。n 4的時候,整個遊戲的流程可能如下所示 3 1 2 4 4 3 6 7 9 16 奶牛們很快不滿足...