洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序
洛谷P1808 单词分类_NOI导刊2011提高(01)
题目描述
Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类。
两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。
例如“AABAC”,它和“CBAAA”就可以归为一类,而和“AAABB”就不是一类。
现在Oliver有N个单词,所有单词均由大写字母组成,每个单词的长度不超过100。你要告诉Oliver这些单词会被分成几类。
输入格式
输入文件的第一行为单词个数N,以下N行每行为一个单词。
输出格式
输出文件仅包含一个数,表示这N个单词分成的类数
输入输出样例
3
AABAC
CBAAA
AAABB
2
说明/提示
对于70%的数据满足N≤100。 对于100%的数据满足N≤10000。
Solution
Algorithm(1)
对每一个字符串自身进行一次内部排序
再对所有字符串进行排序
初始化ans=1;因为至少会有一类的
枚举所有字符串,若str[i]!=str[i+1],ans++;
最后输出ans
最多运算次数:
100*log(100)*10000+10000*log(10000)+10000
约等于O(nlog(n))吧?
Code(100分)
事实证明这还是能过的
并不需要后面的更为复杂的算法
#include<iostream>//不想OI一场空,千万别用万能头
#include<algorithm>//快排sort()
#include<cstring>
using namespace std;
bool cmpchar(char ta,char tb){
return ta<tb;
}
bool cmpstr(string ta,string tb){
return ta<tb;
}
string word[];
int n;
int main()
{
cin>>n;
int ans=;
for(int i=;i<n;i++){
cin>>word[i];
sort(&word[i][],&word[i][word[i].size()],cmpchar);
}
sort(&word[],&word[n],cmpstr);
for(int i=;i<n-;i++)
if(word[i]!=word[i+])
ans++;
cout<<ans;
return ;
}
其思想就是:分类找间隔,类数=间隔+1
ALgorithm(2)
借用STL<map>
map,可以把它当成是一个自定义数组
map<string,bool>word
就是新建一个数组
名为word
下表是string类型的
值则是bool类型的
而且可以像普通数组那样直接访问
word[str]==1;
Code(100分)
#include<iostream>//不想OI一场空,千万别用万能头
#include<algorithm>//快排sort()
#include<cstring>
#include<cstdio>
#include<map>
using namespace std;
map<string,bool>word;
int n,ans;
string t;
int main()
{
scanf("%d",&n);
for(int i=;i<n;i++)
{
cin>>t;
sort(t.begin(),t.end());
if(!word[t])
{
ans++;
word[t]=;
}
}
cout<<ans;
return ;
}
哈哈哈,sort还能这样用哟!
str.begin() str.end()会返回str首尾的地址
这比
sort(&word[i][0],&word[i][word[i].size()],cmpchar);
好用多了吧?
STL大法好!
洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序的更多相关文章
- 洛谷 P1808 单词分类_NOI导刊2011提高(01)
P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当 ...
- 洛谷P1809 过河问题_NOI导刊2011提高(01)
To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...
- 题解 P1808 【单词分类_NOI导刊2011提高(01)】
大家用的方法都太好了!! 蒟蒻小金羊来发一篇玄学堆排. STL大法好! (附有核心code详解,完整code) 核心:两次排序,第一次自我排序,第二次整体排序. 核心code1: string str ...
- Shortest Path Codeforces - 59E || 洛谷P1811 最短路_NOI导刊2011提高(01)
https://codeforces.com/contest/59/problem/E 原来以为不会..看了题解发现貌似自己其实是会的? 就是拆点最短路..拆成n^2个点,每个点用(i,j)表示,表示 ...
- 洛谷——P1795 无穷的序列_NOI导刊2010提高(05)
P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...
- 洛谷P1776 宝物筛选_NOI导刊2010提高(02)
P1776 宝物筛选_NOI导刊2010提高(02) 题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了, ...
- 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)
P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...
- 洛谷P1776 宝物筛选_NOI导刊2010提高(02)(多重背包,单调队列)
为了学习单调队列优化DP奔向了此题... 基础的多重背包就不展开了.设\(f_{i,j}\)为选前\(i\)个物品,重量不超过\(j\)的最大价值,\(w\)为重量,\(v\)为价值(蒟蒻有强迫症,特 ...
- 【洛谷P1795 无穷的序列_NOI导刊2010提高(05)】模拟
分析 map搞一下 AC代码 #include <bits/stdc++.h> using namespace std; map<int,int> mp; inline int ...
随机推荐
- 1222: 计算x^1+x^2+x^3+……+x^n的值
#include <stdio.h>int main(){ int x,n,i,j; long long sum,g;while(scanf("%d%d",&x ...
- t-io Java构建p2p网络
Java 构建p2p网络 这篇文章是一篇关于pbft算法实现的一篇补充文章,但是在这里不会涉及pbft的算法方面,所以可以当做一篇单独的文章食用.如果想查看关于区块链或者PBFT算法的文章,可以参考一 ...
- RUST actix-web连接有密码的Redis数据库
RUST actix-web连接有密码的Redis数据库 actix-web的example里面,使用了自己的actix-redis,但是我尝试了一下,并不好用 替换成另一连接池,deadpool-r ...
- Affinity Propagation Demo1学习
利用AP算法进行聚类: 首先导入需要的包: from sklearn.cluster import AffinityPropagation from sklearn import metrics fr ...
- Codeforces Round #470 (Div. 2) A Protect Sheep (基础)输入输出的警示、边界处理
Bob is a farmer. He has a large pasture with many sheep. Recently, he has lost some of them due to w ...
- 青石巷-小L的爸爸
小L有一个和谐的家. 爸爸具体职业不明,在统战部工作,刚开始和妈妈在一起工作. 妈妈是个会跳舞的语文老师. 奶奶之前也是个老师. 爷爷是个建筑师. 爸爸是最有文采的一个.在小L看来,他的一言一行,一举 ...
- 一个工程中cpp文件的编译顺序
做了一个实验. 最后build失败,失败的原因是变量i被重定义了.原本按照我的思路,是不应该失败的.因为我用了条件编译,若先编译Source.cpp,则会#define __HEADER_H__并且定 ...
- Spring——管理Bean的生命周期
我们可以自定义bean的初始化和销毁方法,这里所指的的初始化和bean的构造不同,初始化是在bean构造完成后,对bean内部的属性或一些逻辑进行初始化. 首先要弄清一些概念: 构造(对象创建) 单实 ...
- 一步步搭建jumpserver
测试推荐环境 CPU: 64位双核处理器 内存: 4G DDR3 数据库:mysql 版本大于等于 5.6 mariadb 版本大于等于 5.5.6 环境 系统: CentOS 7 IP: 192.1 ...
- FakeLogonScreen抓取Windows凭证
FakeLogonScreen抓取Windows凭证 实践中使用的配置 攻击者: 操作系统: Kali Linux 2020.1 IP: 192.168.1.13 目标: 作业系统: Windows ...