一道优先队列习题
hdu1873 看病要排队 优先队列
一、hdu1873 看病要排队 优先队列题目描述看病要排队这个是地球人都知道的常识。不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话,则选择最早来排队的病人。现在就请你帮助医院模拟这个看病过程。输入输入数据包含多组测试,请处理到文件结束。每组数据第一行有一个正整数N(0
STL之stack, queue以及priority_queue
栈、队列、优先队列基本总结
一、stack
要使用stack,必须要包含头文件< stack >
实际上stack只是很单纯地把各项操作转化为内部容器的对应调用,可以使用任何序列式容器来支持stack,只要它们支持back(), push_back(), pop_back()等动作就行。例如你可以使用vector或list来容纳元素:1std::stack< int, std::vector<int> >st;
</div>
stack内部存放元素所用的实际容器,缺省采用deque。之所以采用deque,而非vector,是因为deque移除元素时会释放内存。
stack核心接口:
push():将一个元素置入stack内
top():返回栈顶元素,但是并不移除它
pop():从stack移除元素,但是并不将它返回
empty():检查底层容器是否为空,当栈为空时返回true
size():返回容纳的元素数
如果stack内没有元素,则执行top()和pop()会导致未定义的行为,可以采用成员函数size()和empty ...
STL之二分法四个函数及两道对应习题
STL四个二分搜索操作函数:lower_bound, upper_bound, binary_search, equal_range注意:
四个函数都定义在头文件中,要使用它们必须包含这个头文件
这四个函数都运用了有序区间,这也是二分查找前提,可以用sort函数(需要包含头文件)对数组从小到大排序
一、lower_bound()函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于val的第一个元素位置。如果所有元素都小于val,则返回last的位置。函数返回的是迭代器。函数功能简单实例:1234567891011121314151617181920#include <algorithm>#include <iostream>using namespace std;#define len 12int main(){ int val = 21; int arr[len]={12,15,17,19,20,22,23,26,29,35,40,51}; int k = lowe ...
c++构造函数另一种初始值写法
很多人可能没有注意到,都写成第一种办法的样子,如果有人问我第一种办法可以吗?当然可以,但是效率比较差一些,不够“大气”。(c++构造函数的概念以及作用本文不简述,具体的概念及作用可以自行百度,请谅解)先放出一段类的定义:12345678910111213class complex{public: //需要重点讨论的构造函数 complex (double r= 0, double i = 0) { re = r; im = i; } complex& operator += (const compl&); double real () const { return re; } double imag () const { return im; }private: double re, im; friend complex& _doapl (complex*, const complex&);}然后我们重点在以下的构造函数12complex (double ...
交换字符串
给定一个字符串S[0…N-1],要求把S的前K个字符移动到S的尾部,三种办法。
题目描述给定一个字符串S[0…N-1],要求把S的前K个字符移动到S的尾部如把”abcdef“其前面的2个字符”ab“移动到字符串的尾部,得新字符串”cdefab“,即字符串循环左移K。123注意:1. 循环左移K位等价于循环右移N-K位(可以自己举个例子理解,比如K=2,N=5)2. 时间复杂度要求为0(n),空间复杂度位0(l)
办法:
暴力法:12每次循环左移1位,调用K次即可- 时间复杂度:O(KN),空间复杂度0(l)
拷贝法:1234S[0...K]->T[0...K]S[K+1...N-1]->S[0...N-K-1]T[0...K]->S[N-K...N-1]- 时间复杂度0(N),空间复杂度0(K)
可以看出,上面两种办法都没有办法同时符合条件,下面给出一种比较灵性的解法。
倒转法:1234567 原理:(X‘Y’)‘=YX 举个栗子: 字符串:abcdef X=ab X'=ba Y=cdef Y'=fedc(X‘Y’)‘=(bafedc) ...