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. /dev/random 和 /dev/urandom 的原理

    /dev/null 是一个特殊的设备文件,它丢弃一切写入其中的数据 可以将它 视为一个黑洞, 它等效于只写文件, 写入其中的所有内容都会消失, 尝试从中读取或输出不会有任何结果,同样,/dev/nul ...

  2. 【CSS】水平居中和垂直居中

    水平居中和垂直居中 2019-11-12  15:35:37  by冲冲 1.水平居中 (1)父级元素是行内元素,子级元素是行内元素,子级元素水平居中 ① 设置父级元素为块级元素 display:bl ...

  3. 多线程03.实现Runnable接口

    package chapter2; public class TicketWindowRun implements Runnable { private static final int MAX =5 ...

  4. c++基础知识-数据类型

    1.每次新建项都可需写内容 #include <iostream> using namespace std; int main() //main函数有且只有一个 { system(&quo ...

  5. 详解在Linux中安装配置MongoDB

    最近在整理自己私人服务器上的各种阿猫阿狗,正好就顺手详细记录一下清理之后重装的步骤,今天先写点数据库的内容,关于在Linux中安装配置MongoDB 说实话为什么会装MongoDB呢,因为之前因为公司 ...

  6. Codeforces 356E - Xenia and String Problem(哈希)

    Codeforces 题面传送门 & 洛谷题面传送门 首先显然一个 gray 串的长度只可能是 \(2^k-1\),其中 \(k\in\mathbb{Z}\). 考虑将一个字符改成另外一个字符 ...

  7. 手写Bitset优化

    一种优化方法,具体例子可以看这里 这里只是存一下手写Bitset的板子 struct Bitset { unsigned a[1600]; void reset() { memset(a,0,size ...

  8. Educational Codeforces Round 89 题解

    昨晚简单 vp 了场比赛找了找状态,切了 5 个题(有一个差点调出来),rk57,还算理想吧,毕竟我已经好久没碰过电脑了( A 签到题不多说,直接输出 \(\min\{a,b,\dfrac{a+b}{ ...

  9. 使用Openmp并行化

    运行命令:g++ -fopenmp xx.cpp -lgomp -lpthread -o xx.out 用例一: #include <omp.h> #include <stdio.h ...

  10. 7. Minimum Depth of Binary Tree-LeetCode

    难度系数:easy /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; ...