1. 程式人生 > >【2018百度之星初賽(A)】1002 度度熊學隊列

【2018百度之星初賽(A)】1002 度度熊學隊列

std php begin include push_back targe ref 使用 sin

題目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6375

Knowledge Point:

  STL - map:https://www.cnblogs.com/liubilan/p/9458765.html

  STL - deque:https://www.cnblogs.com/liubilan/p/9461141.html

這道題主要考的是STL容器的使用,沒有寫出來只說明了一個道理:

   STL很重要啊!目前你用到的沒用到的你都得了解並且會使用啊!!

這題主要使用了map, deque兩種容器,map是為了防止超內存,因為map的特性是需要就自動建立新的節點,否則不會開辟多余的空間;

附代碼:

 1 #include<iostream>
 2 #include<map>
 3 #include<deque>
 4 using namespace std;
 5 
 6 int n, q;
 7 map<int, deque<int> > imap;
 8 
 9 void read(int &x){
10     char ch = getchar();x = 0;
11     for (; ch < 0 || ch > 9; ch = getchar());
12 for (; ch >=0 && ch <= 9; ch = getchar()) x = x * 10 + ch - 0; 13 } 14 15 int main() 16 { 17 int option, u, v, w, val; 18 while(cin>>n>>q) 19 { 20 imap.clear(); 21 while(q--) { 22 read(option); read(u); read(w); 23
24 if(option == 1) { 25 read(val); 26 if(!w) imap[u].push_front(val); 27 else imap[u].push_back(val); 28 } 29 else if(option == 2) { 30 if(imap[u].empty()) { 31 cout<<-1<<endl; 32 continue; 33 } 34 if(!w) { 35 cout<<imap[u].front()<<endl; 36 imap[u].pop_front(); 37 } 38 else { 39 cout<<imap[u].back()<<endl; 40 imap[u].pop_back(); 41 } 42 } 43 else if(option == 3) { 44 read(v); 45 if(!v) //v接在u後 46 imap[u].insert(imap[u].end(), imap[w].begin(), imap[w].end()); 47 else //v翻轉後接在u後 48 imap[u].insert(imap[u].end(), imap[w].rbegin(), imap[w].rend()); 49 imap[w].clear(); 50 } 51 } 52 } 53 54 return 0; 55 }

【2018百度之星初賽(A)】1002 度度熊學隊列