Content

定义一个字符串的根为字符串中不同种类的字符按字典序非降序排列得到的字符串。例如 \(\texttt{aaa}\) 的词根为 \(\texttt{a}\),\(\texttt{babb}\) 的词根为 \(\texttt{ab}\),\(\texttt{abczfee}\) 的词根为 \(\texttt{abcefz}\),等等。

现在给出 \(n\) 个字符串,求不同的根的个数。

数据范围:\(1\leqslant n\leqslant 10^3\),字符串长度不超过 \(10^3\)。

Solution

我们看完题之后分析一下就明白,这道题目主要是三个操作:

  1. 字符串的每个字符按照字典序非降序排列。
  2. 将重复的字符去掉。
  3. 判断是否已经出现过。

那我们将每个操作依次分析一下吧。首先是第一个操作,这里教大家用一个非常好用的技巧——用 \(\texttt{sort}\) 直接排序。你没听错,\(\texttt{sort}\) 就是强大到可以直接将第一个操作一刀切。我们假设现在的字符串为 \(s\),然后我们可以通过调用 \(\texttt{sort(s.begin(), s.end());}\)(其实也就相当于将字符串彻头彻尾地按照字典序非降序排列)就可以得到一个里面所有的字符都是按照字典序非降序排列的字符串了。

然后是第二个操作,排序完之后,我们直接遍历字符串,如果当前扫到的字符不和前面的字符相等就加到这个字符串的根里面去,直到扫完为止,这时我们就可以得到一个字符串的根了。

最后是第三个操作,我们可以开一个 \(\texttt{map}\) 来直接将字符串是否出现映射到一个变量上去,这样就可以直接判断字符串的根是否出现过,不需要再用 \(\texttt{hash}\) 判断了。

\(\texttt{STL}\) 有时确实能让你的代码简洁很多,不妨多试试有关于 \(\texttt{STL}\) 的题目。

Code

int n, ans;
string s;
map<string, int> vis; int main() {
getint(n);
while(n--) {
cin >> s;
string root = "";
sort(s.begin(), s.end());
int len = s.size();
_for(i, 0, len - 1)
if(s[i] != s[i - 1]) root += s[i];
if(!vis[root]) {ans++, vis[root] = 1;}
}
writeint(ans);
return 0;
}

CF975A Aramic script 题解的更多相关文章

  1. Codeforces Round #478 (Div. 2) ABCDE

    A. Aramic script time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. Codeforces Round #478 Div2 975A 975B 975C 975D

    A. Aramic script 题目大意:   对于每个单词,定义一种集合,这个集合包含且仅包含单词中出现的字母.给你一堆单词,问有多少种这种集合. 题解:   状压,插入set,取size #in ...

  3. CF泛做

    CF Rd478 Div2 A Aramic script 题意:给定几个字符串,去重后,求种类 思路:直接map乱搞 #include<bits/stdc++.h> using name ...

  4. Codeforces Round #478 (Div. 2)

    题目链接:http://codeforces.com/contest/975 A. Aramic script time limit per test:1 second memory limit pe ...

  5. xss练习,alf.nu/alert1,1-12

    觉得自己很菜,故找一些题来做,随便找了下.记一下通关攻略 https://alf.nu/alert1 第一关 题目:warmup function escape(s) { return '<sc ...

  6. Vulnhub靶场题解

    Vulnhub简介 Vulnhub是一个提供各种漏洞环境的靶场平台,供安全爱好者学习渗透使用,大部分环境是做好的虚拟机镜像文件,镜像预先设计了多种漏洞,需要使用VMware或者VirtualBox运行 ...

  7. [Bugku]Web题解

    bugku地址链接:https://ctf.bugku.com 1.web2 浏览器就显示一堆动态笑脸,时间长了密集恐惧症了. 解法1: F12查看源码 解法2: 地址栏输入: view-source ...

  8. CF1144A Diverse Strings 题解

    Content 我们定义一个字符串是合法的,当且仅当这个字符串是"连续排列"(按照字母表顺序排序).现在给出 \(n\) 个字符串 \(s_1,s_2,s_3,...,s_n\), ...

  9. 从Script到Code Blocks、Code Behind到MVC、MVP、MVVM

    刚过去的周五(3-14)例行地主持了技术会议,主题正好是<UI层的设计模式——从Script.Code Behind到MVC.MVP.MVVM>,是前一天晚上才定的,中午花了半小时准备了下 ...

随机推荐

  1. python的异常打印

    在代码运行中有的代码可能会发生异常,但是奇怪的是异常信息并没有打印出来, 于是我们在代码中加入这个就能打印出来啦. try: #playsound(msg.file_name()) #playsoun ...

  2. 调试:'Object reference note set to an instance of an object.'

    今天调试代码遇到一个奇怪的问题,每次调试到 var files = new List<string>()这一行代码,总是报错:System.NullReferenceException: ...

  3. 一些 tips

    在本博客中,一般写题解的题都是我认为比较有价值的题,然而我还做过一些有一定价值,但并没有达到值得写一篇题解的程度,故将这些题目总结出的套路用一句话概括在这里: 当然如果看到我太久不更请在评论区里催我一 ...

  4. doxygen文件配置

    主要配置修改 整个程序配置分几个部分 Project related configuration options 项目相关,包括: 项目名 输出目录 输出语言 是否显示继承属性 是否对C.Java.F ...

  5. annovar 注释除人类以外的SNP

    1. 准备文件: ref.fa ref.gtf或者gff3,最好是gtf3,可将gff3转化为gtf sample.vcf 2. 用gff3ToGenePred与gtfToGenePred工具将gtf ...

  6. R语言与医学统计图形【4】直方图、金字塔图

    R语言基础绘图系统 基础图形--直方图.金字塔图 3.直方图 参数设置及比较. op <- par(mfrow=c(2,3)) data <- rnorm(100,10,5) hist(d ...

  7. EXCEL ctrl+e 百变用法不只是你用的那么简单

    Excel2013版本中,新增加了一个快捷键:Ctrl+E,可以依据字符之间的关系,实现快速填充功能.一些需要使用公式或者其他功能进行解决的问题,现在只要一个快捷键就可以实现了. 用法1:快速拆解出需 ...

  8. Demo01无重复数字

    package 习题集2;//有1,2,3,4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?public class Demo1 { public static void main(S ...

  9. Flink基础

      一.抽象层次 Flink提供不同级别的抽象来开发流/批处理应用程序. 最低级抽象只提供有状态流.它 通过Process Function嵌入到DataStream API中.它允许用户自由处理来自 ...

  10. C语言time函数获取当前时间

    以前放了个链接,但是原作者把博文删了,这里放一个获取时间的代码,已经比较详细所以不做注释 #include<stdio.h> #include<time.h> #include ...