1396: 队列问题(2)
zcmu:
1396: 隊(duì)列問題(2)
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 71 Solved: 27
[Submit][Status][Web Board]
Description
有一個(gè)含有n個(gè)元素的隊(duì)列q,每個(gè)元素的大小滿足1<=xi<=9(0<i<n)。隊(duì)列有一種操作,對(duì)于隊(duì)首元素若是整個(gè)隊(duì)列最大的則出隊(duì)列,否則加入隊(duì)尾。對(duì)于一個(gè)給定的m,你能告訴我xm是第幾個(gè)出隊(duì)列的嗎?
Input
輸入數(shù)據(jù)第一行是一個(gè)整數(shù)T(1<=T<=1000),表示輸入數(shù)據(jù)的組數(shù);每組數(shù)據(jù)的第一行是兩正整數(shù)n表示隊(duì)列的大小和第幾個(gè)元素(1<n<=1000,0<=m<n),第二行有n個(gè)數(shù)xi ,分別代表每個(gè)元素的大小。
Output
對(duì)于每組測(cè)試數(shù)據(jù),輸出xm是第幾個(gè)出隊(duì)列。
Sample Input
3
1 0
5
4 2
1 2 3 4
6 0
1 1 9 1 1 1
Sample Output
1
2
5
HINT
Source
//重點(diǎn)是理清楚思路,要不然會(huì)浪費(fèi)很多時(shí)間!!
Ac_code:
/*
總結(jié):
STL 中隊(duì)列的使用(queue)
1.頭文件:
按道理是加: #include <queue>和using namespace std;
但是我用codeblock加上去卻無效
所以我用“比較萬能”的頭文件:
#include <bits/stdc++.h>和using namespace std;
2.定義方法:
1).普通定義
queue<int>q;2).結(jié)構(gòu)體
struct date { int x;int y; }; queue<date>q;3.基本操作:
q.push(x) //將x壓入q隊(duì)尾q.pop() //彈出q隊(duì)列的第一個(gè)元素(隊(duì)頭元素),注意此函數(shù)并不返回任何值q.front() //返回q隊(duì)第一個(gè)元素(隊(duì)頭元素)q.back() //返回q隊(duì)最后被壓入的元素(隊(duì)尾元素)q.empty() //當(dāng)q隊(duì)列為空時(shí),返回trueq.size() //返回q隊(duì)列的長度附加:STL 中優(yōu)先隊(duì)列的使用方法(priority_queu)
優(yōu)先隊(duì)列容器與隊(duì)列一樣,只能從隊(duì)尾插入元素,從隊(duì)首刪除元素。但是它有一個(gè)特性,就是隊(duì)列中最大的元素總是位于隊(duì)首,所以出隊(duì)時(shí),并非按照先進(jìn)先出的原則進(jìn)行,而是將當(dāng)前隊(duì)列中最大的元素出隊(duì)。這點(diǎn)類似于給隊(duì)列里的元素進(jìn)行了由大互小的順序排序。元素的比較規(guī)則默認(rèn)按元素值由大到小排序,可以重載“<”操作符來重新定義比較規(guī)則。
使用方法:
1.頭文件:
#include <queue>using namespace std;(實(shí)在沒辦法就用萬能頭文件~)
2.定義方式:
1.)普通方法:
priority_queue<int>q; //通過操作,按照元素從大到小的順序出隊(duì) priority_queue<int,vector<int>, greater<int> >q; //通過操作,按照元素從小到大的順序出隊(duì)2).結(jié)構(gòu)體:
struct date { int x, y; friend bool operator < (date a, date b) { return a.x > b.x; //結(jié)構(gòu)體中,x小的優(yōu)先級(jí)高 } }; priority_queue<date>q; //在該結(jié)構(gòu)中,y為值, x為優(yōu)先級(jí)。 //通過自定義operator<操作符來比較元素中的優(yōu)先級(jí)。 //在重載”<”時(shí),最好不要重載”>”,可能會(huì)發(fā)生編譯錯(cuò)誤自定義優(yōu)先級(jí):
struct cmp { operator bool ()(int x, int y) { return x > y; // x小的優(yōu)先級(jí)高 //也可以寫成其他方式,如: return p[x] > p[y];表示p[i]小的優(yōu)先級(jí)高}};priority_queue<int, vector<int>, cmp>q; //定義方法//其中,第二個(gè)參數(shù)為容器類型。第三個(gè)參數(shù)為比較函數(shù)。3.基本操作:
q.empty() //如果隊(duì)列q為空返回真q.pop() // 刪除q隊(duì)列隊(duì)頂元素q.push() //q隊(duì)列加入一個(gè)元素q.size() //返回優(yōu)先隊(duì)列q中擁有的元素個(gè)數(shù)**q.top() //返回優(yōu)先隊(duì)列q隊(duì)頂元素**在默認(rèn)的優(yōu)先隊(duì)列中,優(yōu)先級(jí)高的先出隊(duì)。在默認(rèn)的int型中先出隊(duì)的為較大的數(shù)。
*/
總結(jié)
以上是生活随笔為你收集整理的1396: 队列问题(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1874: 生活大爆炸版石头剪刀布
- 下一篇: 1776: Press the swit