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

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

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. Linux无法su到普通用户

    无法通过su命令登录到普通用户 [root@linux-server ~]# su - tomcat su: cannot set user id: Resource temporarily unav ...

  2. JS Windows.document对象

    四中选择器:class ,id , name , 标签 通过选择器获取对象: ...................................ClassName('');  -- class选择 ...

  3. Windows网络通信(二):socket异步编程

    简述 这里使用的API和同步编程的API是差不多的,只多了一个ioctlsocket和select函数.这里面涉及一个很重要的结构体fd_set.这里用到的API大部分都是windows和linux通 ...

  4. Siki_Unity_3-16_3D数学基础

    Unity 3-16 3D数学基础 任务0-1:课程介绍 课程大纲: 1. 3D数学介绍 2. Unity中的几种坐标系: 全局坐标系.屏幕坐标系等 坐标系间的坐标转换:比如屏幕坐标转换到世界坐标 3 ...

  5. vs2017搭建linux c++开发环境

    最近一直在阅读ovs的源码,看到用户态代码的时候,需要对用户态的代码进行调试,一开始想直接使用linux中的GDB进行调试,但是ovs的工程太过于复杂,从网上找了些文章,发现vs2017能够支持lin ...

  6. Machine Learning笔记整理 ------ (一)基本概念

    机器学习的定义:假设用P来评估计算机程序在某任务类T上的性能,若一个程序通过利用经验E,使其在T中任务获得了性能改善,我们则说关于任务类T和P,该程序对经验E进行了学习(Mitchell, 1997) ...

  7. Centos 7 zabbix 实战应用

    实际需求:公司已经有了100台服务器,现在需要使用zabbix全部监控起来. 先出个方案(规划) 常规监控:cpu,内存,磁盘,网卡 问题:怎样快速添加100台机器         方法1:使用克隆的 ...

  8. CSS3在线实战

    作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正. 本节课视频网站:https://www ...

  9. 冲刺ing-6

    第六次Scrum冲刺 队员完成的任务 队员 完成任务 吴伟华 Leangoo的看板截图,燃尽图 蔺皓雯 编写博客,界面设计 蔡晨旸 界面设计 曾茜 测试 鲁婧楠 学习后端设计 杨池宇 界面设计 成员遇 ...

  10. IT小小鸟阅读笔记

    人生就像是一艘漂泊的船,你努力滑行了就会找到成功的彼岸,否则就漂泊一生.在这个物欲横流的时代有太多的诱惑使我们静不下心来,但是我们应该时时刻刻警醒自己要做一些对自己成长有意义的事,程序员虽然幸苦但是作 ...