大家用的方法都太好了!!

蒟蒻小金羊来发一篇玄学堆排。

STL大法好!

(附有核心code详解,完整code)


核心:两次排序,第一次自我排序,第二次整体排序。

核心code1:

string strsort(string str)
{
int len=str.size();
for (int temp=0;temp<len;temp++)
{
q2.push(str[temp]);
}
string str2="";
for (int temp=0;temp<len;temp++)
{
char tempchar=q2.top();
str2=str2+tempchar;
q2.pop();
}
return str2;
}

解释:

这个函数就是用来自我排序的函数,

把字符串的字符抽出来,放进优先队列(小根堆)中

利用小根堆自我维护的功能(自动排序),

再从小根堆里抽出来合成一个新的排好序的字符串返回。


核心code2:

int main()
{
/*以上都不是核心*/
for (int i=1;i<=n;i++)
{q1.push(strs[i]);}
string strtemp=q1.top();q1.pop();
for (int i=1;i<n;i++)
{
string temp=q1.top();q1.pop();
if (temp!=strtemp){count++;}
strtemp=temp;
}
/*以下都不是核心*/
}

解释:

利用自我维护,往小根堆里放,再拿出来,

如果和上一次拿出来的不一样,类别count就++。


Entire code:

#include <iostream>//不想OI一场空,千万别用万能头
#include <cstdio>//能不用cin就不用
#include <queue>//优先队列
#include <string>
#include <cstring>
//不在OI的同学请用#include <bits/stdc++.h>
using namespace std;
priority_queue<string,vector<string>,greater<string> >q1;
priority_queue<char,vector<char>,greater<char> >q2;
//由于小金羊不会其他排序,发一个堆排吧...
//话说字符串堆排是不是太玄学了...
//其实原理极其简单,入堆,出堆,返回,搞定。
//然后做一个字符串的整体的堆排,就OK了。
int n,count=1;
//整体变量
string strsort(string str)
{//字符串堆排,真玄学
int len=str.size();
for (int temp=0;temp<len;temp++)
{
q2.push(str[temp]);
}
string str2="";//把要生成的字符串变成空的
for (int temp=0;temp<len;temp++)
{
char tempchar=q2.top();
str2=str2+tempchar;
q2.pop();
}//生成完毕
return str2;//返回排好序的字符串
}
int main()
{
scanf("%d",&n);
if (n==1){putchar('1');return 0;}
//一个字符串还能有多少种啊
string strs[n+1];
//第一个字符串就不要了
for (int i=1;i<=n;i++)
{cin>>strs[i];strs[i]=strsort(strs[i]);}
//输入,并且对单个字符串排序
for (int i=1;i<=n;i++)
{q1.push(strs[i]);}
string strtemp=q1.top();q1.pop();
for (int i=1;i<n;i++)
{
string temp=q1.top();q1.pop();
if (temp!=strtemp){count++;}
strtemp=temp;
}
printf("%d",count);
return 0;
}

这个题也可以sort,sort,也可以mergesort,mergesort

Thanks for your watching.

No copying for a better www.luogu.com.

题解 P1808 【单词分类_NOI导刊2011提高(01)】的更多相关文章

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

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

  2. 洛谷P1808 单词分类_NOI导刊2011提高(01) 字符串排序

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

  3. P1836 【数页码_NOI导刊2011提高(04)】

    P1836 数页码_NOI导刊2011提高(04) 题目描述 一本书的页码是从1—n编号的连续整数:1,2,3,…,n.请你求出全部页码中所有单个数字的和,例如第123页,它的和就是1+2+3=6. ...

  4. 贪心—— P1809 过河问题_NOI导刊2011提高(01)

    洛谷——P1809 过河问题_NOI导刊2011提高(01) 题目描述 有一个大晴天,Oliver与同学们一共N人出游,他们走到一条河的东岸边,想要过河到西岸.而东岸边有一条小船. 船太小了,一次只能 ...

  5. 题解 P1951 【收费站_NOI导刊2009提高(2)】

    查看原题请戳这里 核心思路 题目让求最大费用的最小值,很显然这道题可以二分,于是我们可以二分花费的最大值. check函数 那么,我们该怎么写check函数呢? 我们可以删去费用大于mid的点以及与其 ...

  6. 单人纸牌_NOI导刊2011提高(04)

    单人纸牌 时间限制: 1 Sec  内存限制: 128 MB 题目描述 单人纸牌游戏,共 36 张牌分成 9 叠,每叠 4 张牌面向上.每次,游戏者可以从某两个不同的牌堆最顶上取出两张牌面相同的牌(如 ...

  7. 题解 P1801 【黑匣子_NOI导刊2010提高(06)】

    蒟蒻来发题解了.我仔细看了一下其他题解,各位巨佬用了堆,红黑树,splay,treap之类的强大算法,表示蒟蒻的我只会口胡这些算法,所以我决定用一种极其易理解的算法————fhq treap,作为tr ...

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

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

  9. 公共子序列_NOI导刊2011提高(03)题

    题面 这道题有点坑人啊~ 首先,它需要取模,模数是100000000:(窝在这里死了好久好久,看了别人的代码才发现这一点) 然后我发现题解中没有序列自动机的方法,于是就来一发 首先,虽然序列自动机在定 ...

随机推荐

  1. 1130: [POI2008]POD Subdivision of Kingdom

    1130: [POI2008]POD Subdivision of Kingdom https://lydsy.com/JudgeOnline/problem.php?id=1130 分析: 有效状态 ...

  2. 【RAC搭建报错】libcap.so.1:cannot open shared object file

    原文参考:http://blog.csdn.net/siyanyanyanyai/article/details/45306595 http://orax.blog.sohu.com/26207226 ...

  3. 你的第一个接口测试:Python 接口测试

    前言: 首先我们先明确一个概念,什么叫接口.什么叫接口测试? 接口的全称叫[Application Programming Interface 又叫API],是提供应用程序与开发人员基于某软件或硬件得 ...

  4. Unity Lighting - Emissive Materials 自发光材质(九)

      Emissive Materials 自发光材质 Whilst Area Lights are not supported by Precomputed Realtime GI, similar ...

  5. 吴恩达 Deep learning 第一周 深度学习概论

    知识点 1. Relu(Rectified Liner Uints 整流线性单元)激活函数:max(0,z) 神经网络中常用ReLU激活函数,与机器学习课程里面提到的sigmoid激活函数相比有以下优 ...

  6. sql批量更新

    -----------------更新无锡医院名称 update Opt_DKI_Hospital set centerName =tmp.[医院名称] from Opt_DKI_Hospital h ...

  7. 2.openldap安装

    1.安装步骤如下 获取软件包 安装软件包(rpm或者源码编译) 生产openldap配置文件及数据库文件 配置 添加目录树条目 加载slapd进程 验证 2.所需安装包说明 openldap,open ...

  8. sshpass 指定密码远程 ssh 到服务器 或者 scp 发送文件到服务器

    在操作linux时,虽然可以对linux配置免秘钥登录,但是在配置免密码登录之前,是需要登录到其他节点主机的,这里提供一种类似ssh的方式,可以在命令后面加上相应的参数来设置你将要登录的远程主机的密码 ...

  9. Yii2 UploadedFile上传文件

    通过 UploadFile::getInstance($model, $attribute); UploadFile::getInstances($model, $attribute); Upload ...

  10. php的大小写敏感问题整理

    php的大小写敏感问题整理 今天在开发php的过程中,因为命名大小写的问题导致代码错误,所以从网上整理了php的大小写敏感的一些资料,需要的朋友可以参考下.   PHP对大小写敏感问题的处理比较乱,写 ...