jzoj 2557. 【NOIP2011模拟9.9】单词分类
2016-08-16 12:11
501 查看
题目描述
Oliver为了学号英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类。两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。
例如“AABAC”,它和“CBAAA”就可以归为一类,而和“AAABB”就不是一类。
现在Oliver有N个单词,所有单词均由大写字母组成,每个单词的长度不超过100.你要告诉Oliver这些单词会被分成几类。
输入
输入文件的第一行为单词个数N,以下N行每行为一个单词。输出
输出文件仅包含一个数,表示这N个单词分成的类数。思路
每一个进行一次快排然后for一边就可以了var a:array[0..100000] of string; st:string; i,j,k,m,n,s,len:longint; procedure sort(l,r:longint); var i,j:longint; t,mid:char; begin i:=l; j:=r; mid:=st[random(r-l+1)+l]; repeat while st[i]<mid do inc(i); while st[j]>mid do dec(j); if i<=j then begin t:=st[i]; st[i]:=st[j]; st[j]:=t; inc(i); dec(j); end; until i>j; if i<r then sort(i,r); if l<j then sort(l,j); end; procedure qsort(l,r:longint); var i,j:longint; t,mid:string; begin i:=l; j:=r; mid:=a[random(r-l+1)+l]; repeat while a[i]<mid do inc(i); while a[j]>mid do dec(j); if i<=j then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j); end; until i>j; if i<r then qsort(i,r); if l<j then qsort(l,j); end; begin randomize; readln(n); for i:=1 to n do begin readln(st); len:=length(st); sort(1,len); a[i]:=st; end; qsort(1,n); st:=a[1]; s:=1; for i:=2 to n do begin if a[i]<>st then begin inc(s); st:=a[i]; end; end; writeln(s); end.
相关文章推荐
- 2557. 【NOIP2011模拟9.9】单词分类 (Standard IO)
- 2557. 【NOIP2011模拟9.9】单词分类 (StandardIO)
- 【NOIP2011模拟9.9】单词分类
- jzoj 2558. 【NOIP2011模拟9.9】过河问题
- jzoj 2559. 【NOIP2011模拟9.9】最短路
- 【模拟】[NOIP2011普及组]统计单词数
- 【模拟】[NOIP2011普及组]统计单词数
- JZOJ 3824【NOIP2014模拟9.9】渴
- 【JZOJ3824】【NOIP2014模拟9.9】渴
- JZOJ 5353. 【NOIP2017提高A组模拟9.9】村通网
- jzoj 2570. 【NOIP2011模拟9.17】数字生成游戏
- 【JZOJ 3823】【NOIP2014模拟9.9】遇见
- jzoj 2548. 【NOIP2011模拟9.4】最大正方形
- JZOJ 3822. 【NOIP2014模拟9.9】逆光
- 【JZOJ4772】【NOIP2016提高A组模拟9.9】运输妹子
- noip2011 统计单词数 (模拟)
- jzoj 2541. 【NOIP2011模拟9.1】方格取数
- 2558. 【NOIP2011模拟9.9】过河问题 (Standard IO)
- jzoj 2542. 【NOIP2011模拟9.1】统计
- 2559. 【NOIP2011模拟9.9】最短路 (Standard IO)