STL初步
STL
柏油
不负冬日春晓 不负青春韶华
展开
-
Database UVA 1592数据库
解题思路:两列两列的遍历,从上到下扫描各行,把每一行c1,c2两列的内容作为一个二元数组储存到一个map当中(将输入的每一个不同的字符串分配一个编号(和集合栈计算机做法类似));如果map的键值中已经存在这个二元组,则二元组映射的就是所求的r1,而当前行就是r2。还需要注意一点:结构体用于map,set容器时必须重载#include#include#include#incl原创 2017-01-03 15:32:33 · 803 阅读 · 0 评论 -
hdu 1251 统计难题 (Map的使用)
对于map的一点了解 :首先,会在map查找这个键值的项,map如果不包含某个键值,会返回map的end,然后它发现此键值没有找到(_Where == this->end())的话,会自动在末尾插入(this->insert(_Where)一个以你输入的键值和value的默认值(mapped_type())构成的对儿(pair),然后返回这个插入项的值(second,键是first)。而int原创 2017-01-14 23:50:56 · 302 阅读 · 0 评论 -
Team Queue UVA 540 (团体队列)
#include#include#include#include#includeusing namespace std;const int maxn=1010;int main(){ int t; int count=0; while(scanf("%d",&t)==1 && t){ mapmp; for(int i=1;i int n原创 2017-01-01 08:30:54 · 355 阅读 · 0 评论 -
Ugly Numbers UVA 136 丑数
解题思路:首先丑数是指不能被2,3,5以外其他素数整除的数。最小的丑数数1,对任意一个丑数x; 则2x,3x,5x也都是丑数,一个丑数有多种生成方式,所以,每取出一个丑数都要进行判断是否已经生成过(通过set集合元素不重复的性质),还需要注意的是,本题数据应该用long long 类型存储,故自定义类型ll (typedef long long ll)。#include原创 2017-01-01 10:22:55 · 378 阅读 · 0 评论 -
蓝桥杯 算法提高 排列数 (康拓展开的逆运算 || dfs || next_permutation(a,a+10))
算法提高 排列数 时间限制:1.0s 内存限制:256.0MB 问题描述 0、1、2三个数字的全排列有六种,按照字母序排列如下: 012、021、102、120、201、210 输入一个数n 求0~9十个数的全排列中的第n个(第1个为0123456789)。输入格式 一行,包含一个整数n输出格式 一行,原创 2017-03-31 13:49:43 · 578 阅读 · 0 评论 -
HDU 1027 Ignatius and the Princess II(next_permutation()的应用)
Ignatius and the Princess IITime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7922 Accepted Submission(s): 4678Problem DescriptionN原创 2017-03-31 14:22:59 · 399 阅读 · 0 评论 -
hihoCoder 1062 : 最近公共祖先·一(map、set 运用)
#1062 : 最近公共祖先·一时间限制:10000ms单点时限:1000ms内存限制:256MB描述小Ho最近发现了一个神奇的网站!虽然还不够像58同城那样神奇,但这个网站仍然让小Ho乐在其中,但这是为什么呢?“为什么呢?”小Hi如是问道,在他的观察中小Ho已经沉迷这个网站一周之久了,甚至连他心爱的树玩具都弃置一边。“嘿嘿,小Hi,原创 2017-05-06 11:39:21 · 265 阅读 · 0 评论 -
计蒜客 单独的数字(位运算)
给定一个数组 AAA,除了一个数出现一次之外,其余数都出现三次。找出出现一次的数。如:{1,2,1,2,1,2,7}\{1, 2, 1, 2, 1, 2, 7\}{1,2,1,2,1,2,7},找出777。你的算法只能是线性时间的复杂度,并且不能使用额外的空间哦~输入格式第一行输入一个数 n(1≤n≤500)n(1 \leq n \leq 500)n(1≤n≤500),代表数组原创 2017-05-20 09:13:04 · 307 阅读 · 0 评论 -
UVA 10954 Add All(Huffman编码)
题意:有n个(n分析:从题意可以看出这是一个Huffman编码的问题。AC代码:#include#include#includeusing namespace std;typedef long long LL;int main(){ int N; while(scanf("%d",&N)==1 && N){ priority_queue,greater > q;原创 2017-06-22 17:24:35 · 258 阅读 · 0 评论 -
The SetStack Computer UVA12096(集合栈计算机)
解题思路:本题是集合的集合,通过唯一的ID编号(int)对应于相应的集合,typedef set set1 自定义集合类型,map映射出ID; 把所有不相同的集合存放在vector vec容器当中, 然后通过ID号获得集合(vec[id])。#include#include#include#include#include#include#include#includeu原创 2016-12-31 16:20:29 · 362 阅读 · 0 评论 -
Ananagrams UVA 156(反片语)
#include#include#include#include#include#include#includeusing namespace std;mapmp;vectorvec;string lower1(const string &s){ 将大写转换成小写,其中 tolower位于头文件cctype中 string s1=s; for(int i=0;i原创 2016-12-31 13:13:45 · 317 阅读 · 0 评论 -
The Blocks Problem UVA 101 木块问题
#include#include#include#includeusing namespace std;const int maxn=30;int n;vectorp[maxn];void query(int &a1,int &h1,int a){ //用于找到输入值a,b所在的位置,并通过引用返回 for(a1=0;a1 for(h1=0;h1原创 2016-12-31 10:36:37 · 453 阅读 · 0 评论 -
Alignment of Code (代码对齐)UVA1593
题意如下:输入若干行代码,要求各列单词的左边界对齐且尽量靠左。单词之间至少要空一格。每个单词不超过80个字符,每行不超过180个字符,一共最多1000行。 注意输出时每行的最后一列后面没有空格符。读取字符串的方式和网上一些代码不同,我的稍微复杂了点(我是一个一个字符读,他们是一行一行读),因为在这之前做了一个以这种方式读取的题,所以遇到这道题时,就选原创 2017-01-04 10:24:36 · 511 阅读 · 0 评论 -
Ducci Sequence UVA 1594
本题用了两种解法:解法一是直接通过数组,当所有元素为0时,退出循环解法二则是为了练习STL中容器的使用,利用set容器元素不重复的特点,当元素不同时向set中插入元素,(count()方法判断)有相同时 即为循环;解法一:#include#includeconst int len=20;int a[len];int solve(int n){ for(int i=原创 2017-01-04 17:27:26 · 259 阅读 · 0 评论 -
Throwing cards away I 卡牌游戏 UVA 10935
解题思路:本题通过STL中的队列queue很容易就写出代码,唯一值得注意的是当输入为1时;#include#includeusing namespace std;queueq;int main(){ int n; while(scanf("%d",&n)==1 && n){ for(int i=1;i q.push(i);原创 2017-01-04 22:48:20 · 308 阅读 · 0 评论 -
Foreign Exchange (交换学生)UVA 10763
解题思路:用两个vector容器分别储存输入的两个值,然后通过set储存所有不同的元素,通过set遍历所有元素,vec1[*iter]下标表示交换的学校(A, B)。看了下网上有个反列(10 20 20 30 30 10)所以在最后判断处添加了(n%2==0)偶数个人才能交换。#include#include#includeusing namespace std;c原创 2017-01-05 10:02:51 · 382 阅读 · 0 评论 -
Compound Words(复合词) UVA 10391
解题思路:这道题开始考虑通过合成单词来做,结果超时(复杂度n*n);后面考虑通过分解单词来做(复杂度n*m(m表示单词平均长度))AC了,需要用到string中的分解函数substr(可以在STL中查询)#include#include#include#includeusing namespace std;vectorvec; //通过下标遍历输入的单词s原创 2017-01-05 12:51:05 · 605 阅读 · 0 评论 -
Symmetry(对称轴)UVA 1595
解题思路:本题的突破点在于通过最左边和最右边的点寻找对称轴,我的想法是利用set集合排序(由于用了结构体,故要重写#include#includeusing namespace std;struct note{ int x,y; bool operator return x }};set set1;int main(){ int T; scanf(原创 2017-01-05 22:25:01 · 676 阅读 · 0 评论 -
Printer Queue 打印队列 UVA 12100
解题思路:我的做法是通过队列queue(保存队列)和vector容器(通过sort完成从小到大的排序)完成,只有遇到队列中优先级最高(数字最大)才能移除队列,时间加1(total++);而指定的元素位置仍用m标识,每一次移动m都向前挪动一个。当队列中元素移除一个时,最大元素就变了(通过v--来控制)#include#include#include#includeusing na原创 2017-01-06 09:49:11 · 540 阅读 · 0 评论 -
Matrix Chain Multiplication 矩阵链乘 UVA 442
解题思路:首先解决如何保存输入字母所对应的两个值,通过定义结构体数组nt[0]表示字符'A',以此类推;然后通过通过栈来储存输入的字母,遇到")"时出栈两个元素做运算("(" ")"不入栈)。#include#include#include#includeusing namespace std;struct note{ int a,b; note (int a1=0,in原创 2017-01-07 08:41:58 · 467 阅读 · 0 评论 -
nyoj 括号配对问题(stack的使用)
括号配对问题时间限制:3000 ms | 内存限制:65535 KB难度:3描述现在,有一行括号序列,请你检查这行括号是否配对。输入第一行输入一个数N(0输出每组输入数据的输出占一行,如果该字符串中所含的括号是配对的,则输出Yes,如果不配对则输出No样例输入3[(])(])([[]()])样例输出NoNoYes原创 2017-11-18 21:36:06 · 253 阅读 · 0 评论