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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1396: 队列问题(2)

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

zcmu:
1396: 隊列問題(2)
Time Limit: 1 Sec Memory Limit: 128 MB
Submit: 71 Solved: 27
[Submit][Status][Web Board]
Description

有一個含有n個元素的隊列q,每個元素的大小滿足1<=xi<=9(0<i<n)。隊列有一種操作,對于隊首元素若是整個隊列最大的則出隊列,否則加入隊尾。對于一個給定的m,你能告訴我xm是第幾個出隊列的嗎?

Input

輸入數據第一行是一個整數T(1<=T<=1000),表示輸入數據的組數;每組數據的第一行是兩正整數n表示隊列的大小和第幾個元素(1<n<=1000,0<=m<n),第二行有n個數xi ,分別代表每個元素的大小。

Output

對于每組測試數據,輸出xm是第幾個出隊列。

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
//重點是理清楚思路,要不然會浪費很多時間!!
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]) //此時隊列q隊頭元素不是最大值{q.push(q.front()); //隊頭元素加到隊尾q.pop(); //隊頭變更}else //隊頭元素是最大值{if(q.front().ad==m) //隊頭元素是最大值而且是所在位置為目標值flag = 1;i--;q.pop();sum++;if(flag){cout<<sum<<endl;break;}}}}}return 0;}

/*
總結:
STL 中隊列的使用(queue)
1.頭文件:
按道理是加: #include <queue>和using namespace std;
但是我用codeblock加上去卻無效
所以我用“比較萬能”的頭文件:
#include <bits/stdc++.h>和using namespace std;
2.定義方法:

1).普通定義

queue<int>q;

2).結構體

struct date { int x;int y; }; queue<date>q;

3.基本操作:

q.push(x) //將x壓入q隊尾q.pop() //彈出q隊列的第一個元素(隊頭元素),注意此函數并不返回任何值q.front() //返回q隊第一個元素(隊頭元素)q.back() //返回q隊最后被壓入的元素(隊尾元素)q.empty() //當q隊列為空時,返回trueq.size() //返回q隊列的長度

附加:STL 中優先隊列的使用方法(priority_queu)

優先隊列容器與隊列一樣,只能從隊尾插入元素,從隊首刪除元素。但是它有一個特性,就是隊列中最大的元素總是位于隊首,所以出隊時,并非按照先進先出的原則進行,而是將當前隊列中最大的元素出隊。這點類似于給隊列里的元素進行了由大互小的順序排序。元素的比較規則默認按元素值由大到小排序,可以重載“<”操作符來重新定義比較規則。

使用方法:

1.頭文件:

#include <queue>using namespace std;

(實在沒辦法就用萬能頭文件~)
2.定義方式:

1.)普通方法:

priority_queue<int>q; //通過操作,按照元素從大到小的順序出隊 priority_queue<int,vector<int>, greater<int> >q; //通過操作,按照元素從小到大的順序出隊

2).結構體:

struct date { int x, y; friend bool operator < (date a, date b) { return a.x > b.x; //結構體中,x小的優先級高 } }; priority_queue<date>q; //在該結構中,y為值, x為優先級。 //通過自定義operator<操作符來比較元素中的優先級。 //在重載”<”時,最好不要重載”>”,可能會發生編譯錯誤

自定義優先級:

struct cmp { operator bool ()(int x, int y) { return x > y; // x小的優先級高 //也可以寫成其他方式,如: return p[x] > p[y];表示p[i]小的優先級高}};priority_queue<int, vector<int>, cmp>q; //定義方法//其中,第二個參數為容器類型。第三個參數為比較函數。

3.基本操作:

q.empty() //如果隊列q為空返回真q.pop() // 刪除q隊列隊頂元素q.push() //q隊列加入一個元素q.size() //返回優先隊列q中擁有的元素個數**q.top() //返回優先隊列q隊頂元素**

在默認的優先隊列中,優先級高的先出隊。在默認的int型中先出隊的為較大的數。
*/

總結

以上是生活随笔為你收集整理的1396: 队列问题(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。