1 条题解
-
0
#include <bits/stdc++.h> using namespace std; // [1] arr数组-存储每组测试用例的出栈序列,最多支持200个元素(适配n≤100的数据范围) int arr[200]; int main() { // [2] t-测试用例的组数(m≤30) int t; cin>>t; // [3] 处理每组测试用例 while(t--){ // [4] n-当前测试用例的出栈序列长度(1≤n≤100) int n; cin>>n; // [5] s-模拟入栈和出栈的栈 stack<int> s; // [6] 读取当前测试用例的出栈序列,存入arr数组 for(int i=0;i<n;i++) cin>>arr[i]; // [7] flag-标记出栈序列是否合法(1=合法,0=不合法);j-当前待入栈的元素(初始为1,因为入栈顺序是1,2,...,n) int flag=1,j=1; // [8] 遍历出栈序列的每个元素,模拟入栈和出栈过程 for(int i=0;i<n;i++){ // [9] 入栈逻辑:将所有小于等于当前出栈元素arr[i]的元素入栈(因为入栈顺序是递增的,必须先入栈1到arr[i],才能让arr[i]在栈顶) while(arr[i]>=j){ s.push(j++); } // [10] 检查栈顶是否等于当前出栈元素:如果是,说明可以合法出栈,弹出栈顶;否则序列不合法 if(s.top() == arr[i]){ s.pop(); }else{ flag=0; cout<<"No"<<endl; break; } } // [11] 如果所有元素都合法出栈,输出Yes if(flag==1) cout<<"Yes"<<endl; } return 0; }
- 1
信息
- ID
- 1258
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 2
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者