hdu 1022 Train Problem I 栈
2010-02-11 22:22
573 查看
TrainProblemI
[b]TimeLimit:2000/1000MS(Java/Others)MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):3121AcceptedSubmission(s):1148[/b]ProblemDescriptionAsthenewtermcomes,theIgnatiusTrainStationisverybusynowadays.Alotofstudentwanttogetbacktoschoolbytrain(becausethetrainsintheIgnatiusTrainStationisthefastestallovertheworld^v^).Butherecomesaproblem,thereisonlyonerailwaywhereallthetrainsstop.Soallthetrainscomeinfromonesideandgetoutfromtheotherside.Forthisproblem,iftrainAgetsintotherailwayfirst,andthentrainBgetsintotherailwaybeforetrainAleaves,trainAcan'tleaveuntiltrainBleaves.Thepicturesbelowfigureouttheproblem.Nowtheproblemforyouis,thereareatmost9trainsinthestation,allthetrainshasanID(numberedfrom1ton),thetrainsgetintotherailwayinanorderO1,yourtaskistodeterminewhetherthetrainscangetoutinanorderO2.3123321 3123312SampleOutput
Yes. in in in out out out FINISH No. FINISH
HintHint ForthefirstSampleInput,welettrain1getin,thentrain2andtrain3. Sonowtrain3isatthetopoftherailway,sotrain3canleavefirst,thentrain2andtrain1. InthesecondSampleinput,weshouldlettrain3leavefirst,sowehavetolettrain1getin,thentrain2andtrain3. Nowwecanlettrain3leave. Butafterthatwecan'tlettrain1leavebeforetrain2,becausetrain2isatthetopoftherailwayatthemoment. Soweoutput"No.".
设进出两个顺序分别为order1和order2,如果此时栈为空或者当前的栈顶元素不等于order2[i],就让order1[j]入栈,同时将"in"记录入q队列中。
else如果此时栈顶元素等于order2[i],就将此栈顶元素弹出(sk.pop()),并将"out"记录入q队列。
不断进行上面上面两个判断,直到两个数组遍历完,或者在中途中达不到目标顺序,使程序停止。
#include<iostream>#include<queue>#include<stack>#include<string>usingnamespacestd;intn;inti,j;charorder1[12],order2[12];voidcal(){ stack<char>sk; queue<string>q; for(i=0,j=0;i<n&&j<=n;) { if(sk.empty()||sk.top()!=order2[i]) { if(j==n) { cout<<"No./nFINISH"<<endl; return; } sk.push(order1[j++]); q.push("in"); } else { sk.pop(); q.push("out"); i++; } } cout<<"Yes."<<endl; stringch; while(!q.empty()) { ch=q.front(); cout<<ch<<endl; q.pop(); } cout<<"FINISH"<<endl;}intmain(){ while(cin>>n) { cin>>order1>>order2; cal(); } return0;}
上面代码较为简略了,后来又写了一次,下面代码比较清晰:
#include<iostream>#include<string>#include<vector>#include"functional"#include<memory.h>#include<vector>#include"numeric"#include"algorithm"usingnamespacestd;#definemin(a,b)a>b?b:a#defineN12#defineIN0#defineOUT1charo1,o2;intseq[N*2];intidx;intcal(intn){ intc1=0,c2=0; vector<char>V; //V.push_back(o1[c1++]); while(c1<=n) { while(!V.empty()&&V.back()==o2[c2]) { V.pop_back(); seq[idx++]=OUT; c2++; } while((V.empty()||V.back()!=o2[c2])&&c1<=n) { V.push_back(o1[c1]); seq[idx++]=IN; c1++; } } if(c2<n) returnfalse; returntrue;}intmain(){ intn; while(cin>>n) { idx=0; cin>>o1>>o2; if(cal(n)) { cout<<"Yes."<<endl; for(inti=0;i<n*2;i++) if(seq[i]==IN) cout<<"in"<<endl; else cout<<"out"<<endl; } else cout<<"No."<<endl; cout<<"FINISH"<<endl; } return0;}[/code]
相关文章推荐
- HDU 1022 Train Problem I (STL - 栈的使用)
- HDU 1022 Train Problem I
- hdu 1022 Train Problem I 简单堆栈
- hdu 1022 Train Problem I_栈的应用经典例题
- hdu 1022 Train Problem I <stack>
- HDU 1022 Train Problem I (stack)
- HDU 1022 Train Problem I 模拟栈题解
- HDU 1022 Train Problem I 附详细思路
- HDU1022——Train Problem I(栈 stack)
- HDU 1022 Train Problem I
- HDU 1022 Train Problem I(stack)
- HDU 1022 Train Problem I
- HDU 1022 ( Train Problem I )
- HDU 1022 Train Problem I 栈
- 【栈】hdu 1022 Train Problem I(外:poj 1383 Rails)
- HDU 1022 Train Problem I
- hdu 1022 Train Problem I (栈的应用)
- HDU 1022 Train Problem I
- Train Problem I hdu 1022 栈的运用
- HDU 1022 Train Problem I