日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1396: 队列问题(2)

發(fā)布時(shí)間:2024/9/3 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1396: 队列问题(2) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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:

#include <bits/stdc++.h>using namespace std;struct date{int key;int ad;};int main(){int T;while(cin>>T){while(T--){queue<date>q;int n,m,sum = 0,flag = 0;cin>>n>>m;int a[n+2];date x;for(int i = 0; i < n; i++){cin>>a[i];x.key = a[i];x.ad = i;q.push(x);}sort(a,a+n);for(int i = n-1; i >= 0;){if(q.front().key!=a[i]) //此時(shí)隊(duì)列q隊(duì)頭元素不是最大值{q.push(q.front()); //隊(duì)頭元素加到隊(duì)尾q.pop(); //隊(duì)頭變更}else //隊(duì)頭元素是最大值{if(q.front().ad==m) //隊(duì)頭元素是最大值而且是所在位置為目標(biāo)值flag = 1;i--;q.pop();sum++;if(flag){cout<<sum<<endl;break;}}}}}return 0;}

/*
總結(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。