zoukankan      html  css  js  c++  java
  • 单词分类 (Standard IO)

    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.
    
  • 相关阅读:
    ubuntu
    什么是守护进程?
    Redis 简介
    什么是原子性,什么是原子性操作?
    什么是BSD协议?
    查看内存
    数据库备份与还原
    PostgreSQL 判断字符串包含的几种方法
    SQL 基础
    手风琴-过渡效果,显示隐藏列表案例
  • 原文地址:https://www.cnblogs.com/zyx-crying/p/9319600.html
Copyright © 2011-2022 走看看