hdu 1022 Train Problem I 解题报告
題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1022
???? 其實(shí)是一道上數(shù)據(jù)結(jié)構(gòu)課講過(guò)的例題? 只不過(guò)當(dāng)時(shí)講的是怎么用手算? 一道水題又花了好長(zhǎng)時(shí)間 其實(shí)就是棧的模擬 相當(dāng)于數(shù)據(jù)結(jié)構(gòu)的練習(xí)題 利用棧的先進(jìn)后出的順序 先將數(shù)進(jìn)棧 等到合適的時(shí)候不停地出棧 在進(jìn)棧 最后看看棧是否為空 如果能全部出棧棧為空?輸出路徑 否則無(wú)法實(shí)現(xiàn)? 記錄路徑 我用了一個(gè)隊(duì)列 其實(shí)可以使用數(shù)組 不過(guò)想到先進(jìn)先出首先想到了隊(duì)列queue?使用各種數(shù)據(jù)結(jié)構(gòu)的時(shí)候一定要注意多次使用時(shí)要清空結(jié)構(gòu) 還有就是要考慮空的情況? STL 有點(diǎn)使人變懶了 希望以后自己能少用吧
粘代碼:
1 #include<iostream>2 #include<stack>
3 #include<string>
4 #include<string>
5 #include<queue>
6 #define in 1
7 #define out 0
8 using namespace std;
9 int main()
10 { queue<bool> road;
11 stack<char> ans;
12 string begin,end;
13 int num,i,j;
14 while(cin>>num>>begin>>end)
15 {
16
17 while(!ans.empty())
18 ans.pop();
19 i=0;
20 j=0;
21 /* cout<<num<<endl;
22 cout<<begin<<endl;
23 cout<<end<<endl; */
24 for(i=0;i<num;i++)
25 {
26 if(j>=num)
27 break;
28 ans.push(begin[i]);
29 road.push(in);
30 while(!ans.empty()&&ans.top()==end[j])// 最開(kāi)始的時(shí)候沒(méi)考慮ans是空的情況看看測(cè)試交了 結(jié)果數(shù)組越界
31 {
32 ans.pop();
33 road.push(out);
34 j++;
35 if(j>=num)
36 {break;}
37 }
38 }
39 if(ans.empty())
40 {
41 cout<<"Yes."<<endl;
42 while(!road.empty())
43 { if(road.front()==1)
44 cout<<"in"<<endl;
45 else
46 cout<<"out"<<endl;
47 road.pop();
48 }
49 cout<<"FINISH"<<endl;
50 }
51 else
52 {
53 cout<<"No."<<endl;
54 cout<<"FINISH"<<endl;//這最悲劇了 沒(méi)仔細(xì)看題 no的后面沒(méi)輸出finish WA了
55 while(!road.empty())//清空路徑
56 road.pop();
57 while(!ans.empty())
58 ans.pop();
59 }
60 }
61 // system("pause");
62 return 0;
63 }
轉(zhuǎn)載于:https://www.cnblogs.com/yujiaao/archive/2011/10/29/2228696.html
總結(jié)
以上是生活随笔為你收集整理的hdu 1022 Train Problem I 解题报告的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android UI开发第二篇——多级
- 下一篇: linux 开机自动启动服务