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. idea反编译失败 /* compiled code */的解决方法

    最近在研究源码,但是我的idea有点奇怪,有的文件可以反编译,但有的文件反编译后方法内容是 /* compiled code */,查了下说是反编译失败了,都说是插件的原因. 然后我看了下idea的插 ...

  2. PHP 日期详细介绍

    简介 你可以使用这些函数获取运行 PHP 的服务器的日期和时间, 也可以使用这些函数把日期和时间 格式化成不同格式的字符串. 日期和时间信息在 PHP 内部是以 64 位数字存储的, 它可以覆盖当前时 ...

  3. CF1550D Excellent Arrays

    考虑每个数一定是这个形式: \(i + x,i - x\) 所以如果我们要构造一个最大的数组. 那一定是这样的形式: 有一半为\(i + x\),有一半\(i - x\) 那么我们发现每个数有这样一个 ...

  4. P6585 中子衰变

    我们偶数的时候只要对称操作. 奇数的话,我们定义\(1\)的相反数为\(-1\),\(0\)相反数为\(0\). 我们维护最长的两边的相反串,中间一段除了一个端点,其他均被染成同色. 那么如果对方染端 ...

  5. Atcoder Beginner Contest 164 E Two Currencies(拆点+最短路)

    题目链接 题意:有 \(n\) 个城市,它们由 \(m\) 条双向道路连接,保证它们能够彼此到达.第 \(i\) 条道路连接 \(u_i,v_i\),需要花费 \(x_i\) 个银币,耗费 \(t_i ...

  6. JSOI 2008 最小生成树计数

    JSOI 2008 最小生成树计数 今天的题目终于良心一点辣 一个套路+模版题. 考虑昨天讲的那几个结论,我们有当我们只保留最小生成树中权值不超过 $ k $ 的边的时候形成的联通块是一定的. 我们可 ...

  7. 感谢 git

    今天对程序大修了一下,顺便把所有算例测试了一遍,突然发现二维浅水方程有些算例出现了明显的错误. 这次突然出现的错误让我有点措手不及,因为一直没有修改过浅水方程求解器,所以这些算例很久没有测试过了.硬着 ...

  8. 混合(Pooling)样本测序研究

    目录 1.混合测序基础 2. 点突变检测 3. BSA 4. BSR 5. 混合样本GWAS分析 6. 混合样本驯化研究 7. 小结 1.混合测序基础 测序成本虽然下降了,但对于植物育种应用研究来说还 ...

  9. SQL-Union、Union ALL合并两个或多个 SELECT 语句的结果集

    UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每条 SELECT 语句中的列 ...

  10. 作为Java技术面试官,我如何深挖候选人的技能

    作为Java资深技术面试官,首先我感觉有必要讲解"面试官深挖问题"的动机,在了解动机的前提下,大家才能更好地准备面试.面试官为什么要在一个点上深挖?两大目的.   1 首先是通过深 ...