【2018百度之星初賽(A)】1002 度度熊學隊列
阿新 • • 發佈:2018-08-11
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); 2324 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 度度熊學隊列