Problem 1462 - Books changing(模拟题STL数据结构)
http://acm.whu.edu.cn/land/problem/detail?problem_id=1462
#include<stdio.h> #include<list> #include<deque>//TLE //#incldue<fstream> #include<iostream> using namespace std; //list<int>la,lb,lc; //list<int>::reverse_iterator rit; //list<int>::iterator it; deque<int>la,lb,lc; deque<int>::reverse_iterator rit; deque<int>::iterator it; /*int pf(deque<int>a) { for(it=a.begin();it!=a.end();it++) printf(" %d*",*it); printf("\n"); }*/ int main() { int _case,n,x,y; int ii; scanf("%d",&_case); for(ii=1;ii<=_case;ii++) { la.clear(); lb.clear(); lc.clear(); int jr=0;//odd or even scanf("%d %d %d",&n,&x,&y); for(int i=1; i<=n; i++) //initialize la la.push_back(i); while(lc.size()<n) { if(jr==0) { if(la.size()>=x) { for(int i=0; i<x; i++) { lb.push_back(*(--la.end()) ); la.erase(--la.end()); } } else if(la.size()!=0) { for(int i=0; la.size(); i++) { lb.push_back(*(--la.end())); la.erase(--la.end()); } } if(lb.size()>=y) { for(int i=0; i<y; i++) { lc.push_back(*(--lb.end())); lb.erase(--lb.end()); } } else if(lb.size()!=0) { for(int i=0;lb.size();i++) { lc.push_back(*(--lb.end())); lb.erase(--lb.end()); } } jr=1; //pf(la); //pf(lb); //pf(lc);printf("#######ji\n"); } if(jr==1) { if(la.size()>=x) { for(int i=0;i<x;i++) { lb.push_front(*la.begin()); la.erase(la.begin()); } } else if(la.size()!=0) { for(int i=0;la.size();i++)//i<la.size() { lb.push_front(*la.begin()); la.erase(la.begin()); } } if(lb.size()>=y) { for(int i=0;i<y;i++) { lc.push_back(*lb.begin()); lb.erase(lb.begin()); } } else if(lb.size()!=0) { for(int i=0;lb.size();i++)//i< { lc.push_back(*lb.begin()); lb.erase(lb.begin()); } } jr=0; //pf(la); //pf(lb); //pf(lc);printf("######ou\n"); } } printf("Case %d:",ii); for(rit=lc.rbegin();rit!=lc.rend();rit++) printf(" %d",*rit); printf("\n"); } return 0; }
!刚开始用的是list(双向循环链表),TLE。
后来分析才发现双向循环链表,根本就用不上。改为deque就AC了
(仅仅的换了存储结构,其他代码偶不用改,STL够强大,通用性也好!!)!