单词分类 (Standard IO)

    xiaoxiao2026-04-03  7

    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]<mid do inc(i); while a[j]>mid do dec(j); if i=j then begin inc(i);dec(j);end else if i<j then begin p:=a[i];a[i]:=a[j];a[j]:=p; inc(i);dec(j); end; until i>j; if l<j then qsort(l,j); if i<r then 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]<mid 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 l<j then qsort1(l,j); if i<r then 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.
    转载请注明原文地址: https://ju.6miu.com/read-1308459.html
    最新回复(0)