洛谷P1808 单词分类_NOI导刊2011提高(01)

题目描述

Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类。

两个单词可以分为一类当且仅当组成这两个单词的各个字母的数量均相等。

例如“AABAC”,它和“CBAAA”就可以归为一类,而和“AAABB”就不是一类。

现在Oliver有N个单词,所有单词均由大写字母组成,每个单词的长度不超过100。你要告诉Oliver这些单词会被分成几类。

输入格式

输入文件的第一行为单词个数N,以下N行每行为一个单词。

输出格式

输出文件仅包含一个数,表示这N个单词分成的类数

输入输出样例

输入 #1复制


AABAC 
CBAAA 
AAABB
输出 #1复制

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) 字符串排序的更多相关文章

  1. 洛谷 P1808 单词分类_NOI导刊2011提高(01)

    P1808 单词分类_NOI导刊2011提高(01) 题目描述 Oliver为了学好英语决定苦背单词,但很快他发现要直接记住杂乱无章的单词非常困难,他决定对单词进行分类. 两个单词可以分为一类当且仅当 ...

  2. 洛谷P1809 过河问题_NOI导刊2011提高(01)

    To 洛谷.1809 过河问题 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能乘坐两人.每个人都有一个渡河时 ...

  3. 题解 P1808 【单词分类_NOI导刊2011提高(01)】

    大家用的方法都太好了!! 蒟蒻小金羊来发一篇玄学堆排. STL大法好! (附有核心code详解,完整code) 核心:两次排序,第一次自我排序,第二次整体排序. 核心code1: string str ...

  4. Shortest Path Codeforces - 59E || 洛谷P1811 最短路_NOI导刊2011提高(01)

    https://codeforces.com/contest/59/problem/E 原来以为不会..看了题解发现貌似自己其实是会的? 就是拆点最短路..拆成n^2个点,每个点用(i,j)表示,表示 ...

  5. 洛谷——P1795 无穷的序列_NOI导刊2010提高(05)

    P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...

  6. 洛谷P1776 宝物筛选_NOI导刊2010提高(02)

    P1776 宝物筛选_NOI导刊2010提高(02) 题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了, ...

  7. 洛谷 P1795 无穷的序列_NOI导刊2010提高(05)

    P1795 无穷的序列_NOI导刊2010提高(05) 题目描述 有一个无穷序列如下: 110100100010000100000… 请你找出这个无穷序列中指定位置上的数字 输入输出格式 输入格式: ...

  8. 洛谷P1776 宝物筛选_NOI导刊2010提高(02)(多重背包,单调队列)

    为了学习单调队列优化DP奔向了此题... 基础的多重背包就不展开了.设\(f_{i,j}\)为选前\(i\)个物品,重量不超过\(j\)的最大价值,\(w\)为重量,\(v\)为价值(蒟蒻有强迫症,特 ...

  9. 【洛谷P1795 无穷的序列_NOI导刊2010提高(05)】模拟

    分析 map搞一下 AC代码 #include <bits/stdc++.h> using namespace std; map<int,int> mp; inline int ...

随机推荐

  1. 七、django学习之聚合函数

    七.django学习之聚合函数 如何使用 from django.db.models import Avg,Max,Min,Sum models.Book.objects.all().aggregat ...

  2. 【Java并发工具类】Lock和Condition

    前言 Java SDK并发包通过Lock和Condition两个接口来实现管程,其中Lock用于解决互斥问题,Condition用于解决同步问题.我们需要知道,Java语言本身使用synchroniz ...

  3. 暑假第五周总结(学习HBASE相关知识)

    本周主要对HBASE的相关知识进行了学习,主要是通过视频的讲解了解到了HBASE的存储机制,HBASE的机制与普通的关系型数据库完全不同,HBASE以列进行存储,其主要执行的就是增删查操作,其更改主要 ...

  4. 使用.NET Core优雅获取并展示最新疫情数据

    前言 新型冠状病毒的出现,着实让人紧张.我每天一大早都会去查看今天的最新数据,可是每次的数据都挺让人揪心的.今天突然间很想看看过去的历史的数据,结果查了很多资料都不是很全.反正国家让我们待在家里做贡献 ...

  5. 《ASP.NET Core 高性能系列》静态文件中间件

    一.概述 静态文件(如 HTML.CSS.图片和 JavaScript等文件)是 Web程序直接提供给客户端的直接加载的文件. 较比于程序动态交互的代码而言,其实原理都一样(走Http协议), ASP ...

  6. 应用层vc实现三种文件监视方法

    http://hi.baidu.com/sadusaga/item/daa0d4b764c6dd76254b09cc http://bbs.csdn.net/topics/280032788 http ...

  7. Java12可用新特性一览,了解一下没有错

    你有一个思想,我有一个思想,我们交换后,一个人就有两个思想 If you can NOT explain it simply, you do NOT understand it well enough ...

  8. CCF_ 201403-2_窗口

    用deque模拟. #include<iostream> #include<cstdio> #include<deque> using namespace std; ...

  9. 小白的springboot之路(十五)、mybatis的PageHelper分页插件使用

    0.前言 用mybatis,那么分页必不可少,基本都是用PageHelper这个分页插件,好用方便: 1.实现 1.1.添加依赖: <!-- 3.集成 mybatis pagehelper--& ...

  10. ubuntu下安装secureCRT(含破解方法)

    一.下载SecureCRT安装文件及破解文件: 链接: https://pan.baidu.com/s/1A7opflFKSUi13PkzVCnhDQ 密码: gbf5 二.下载完成安装文件后安装Se ...