4 solutions
-
3
经典火车进站问题
只是要记录入站出站的次序而已
#include<bits/stdc++.h> using namespace std; int main() { int t,n; cin>>t; while(t--){ vector<string>ans;//我用这个来记录入栈出栈 stack<char>zh; cin>>n; string s,f; cin>>s>>f; for(int i=0,p=0;i<n;i++){ ans.push_back("in"); zh.push(s[i]); while(!zh.empty()&&zh.top()==f[p]){ p++; ans.push_back("out"); zh.pop(); } } if(!zh.empty())cout<<"No.\nFINISH"<<endl; else { cout<<"Yes."<<endl; for(string w:ans) cout<<w<<endl; cout<<"FINISH"<<endl; } getchar(); } return 0; }
-
1
思路
其实这道题跟上面有一道火车变轨思路一样只是多了两个地方不同,一是不是按顺序输入,二是需要输出火车出站入站顺序
注意事项
1、我卡在输出的地方了看了一下大佬的题解,然后发现vactor可以进行存储字符串,这玩意是真好用 2、我卡在存储了vector不知道怎么正向怎么输出,想了一会想起了迭代器这东西;迭代器和vector结合起来可以想怎么输出就怎么输出;
#include<bits/stdc++.h> using namespace std; string a; string b; vector <string> v; stack <int> s; int main(){ int t; cin>>t; for(int i=0;i<t;i++){ int n; cin>>n; cin>>a>>b; int k=0; for(int j=0;j<n;j++){ s.push(a[j]-'0');//上一题这里是默认的升序;这里是任意所以我们需要这样改变一下 v.push_back("in"); if(b[k]-'0'==s.top()){ while(!s.empty()){ if(b[k]-'0'==s.top()){ v.push_back("out"); s.pop(); k++; } else{ break; } } } } if(!s.empty()){ cout<<"No."<<endl<<"FINISH"<<endl; } else{ cout<<"Yes."<<endl; for(vector<string>::iterator f = v.begin();f!=v.end();f++){ cout<<*f<<endl; } cout<<"FINISH"<<endl; } v.clear(); while(!s.empty()){ s.pop(); } } return 0; }
-
1
感谢欧云峰大佬,不然还真不知道怎么记录入栈,那个vector.at()是我网上找的,据说可以读取栈
#include<stdio.h> #include<stack> #include <vector> #include<iostream> #include<string.h> using namespace std; int main() { int n,num; char s1[100]; char s2[100]; scanf("%d",&n); while(n--){ scanf("%d",&num); scanf("%s %s",s1,s2); stack<char> train; vector<int> member; int j = 0; for(int k = 0;k < num;k++) { train.push(s1[k]); member.push_back(1); while(!train.empty()&&train.top() == s2[j]) { member.push_back(0); train.pop(); j++; } } if(train.size()==0){ printf("Yes.\n"); for(int k = 0;k<member.size();k++) { if(member.at(k)) { printf("in\n"); } else { printf("out\n"); } } } else { printf("No.\n"); } printf("FINISH\n"); memset(s1,0,sizeof(s1)); memset(s2,0,sizeof(s2)); } return 0; }
-
0
有三个值得注意的点 1.记得每次初始化数组 2.输入要用char类型 3.不要看我这个菜鸡写的
#include<iostream> #include<cstring> #include<stack> using namespace std; int n,t,l=0,a[37],k=0; char o[17],O[17]; int main(){ cin>>t; while(t--){ int flag=0; l=0,k=0; memset(a,0,sizeof(a)); memset(o,'\0',sizeof(o)); memset(O,'\0',sizeof(O)); stack<char>ans; cin>>n; for(int i=0;i<n;i++)cin>>o[i]; for(int i=0;i<n;i++){ cin>>O[i]; a[k]=1; k++; if(O[l]==o[i]){ l++; a[k]=0; k++; while(!ans.empty()){ if(ans.top()==O[l]){ l++; ans.pop(); a[k]=0; k++; } else break; } } else ans.push(o[i]); } while(!ans.empty()){ if(ans.top()==O[l]){ l++; ans.pop(); a[k]=0; k++; } else { cout<<"No."<<endl<<"FINISH"<<endl; flag=1; break; } } if(!flag){ cout<<"Yes."<<endl; for(int i=0;i<2*n;i++){ if(a[i]==1)cout<<"in"<<endl; else cout<<"out"<<endl; } cout<<"FINISH"<<endl; } } return 0; }
- 1
Information
- ID
- 340
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 3
- Tags
- # Submissions
- 38
- Accepted
- 15
- Uploaded By