文章

26

粉丝

0

获赞

82

访问

2.8k

头像
堆栈基本操作 题解:
P5218 北京大学2024年机试题
发布于2026年2月14日 22:28
阅读数 89

#include<bits/stdc++.h>
using namespace std;

int main()
{
	int n; cin >> n;
	stack<int> stk;
	vector<pair<string, int>> vc;
	
	int start = 1;
	bool flag = true;
	for(int i = 0; i < n; i ++)
	{
		int x; cin >> x;
		while(stk.empty() || stk.top() != x)
		{
			if(start > n){flag = false; break;} //只有超过nflag才变false喵
			stk.push(start);
			vc.push_back({"PUSH", start});
			start ++;
		}
		if(flag){
			int ele = stk.top(); stk.pop();
			vc.push_back({"POP", ele}); //这里就是确保如果flag是true且跳出了上面那个while条件,那么才可以有POP操作
		}
		if(!flag){break;}
	}

	if(!flag) cout << "NO";
	if(flag)
	{
		for(auto ele : vc)
		{
			cout << ele.first << " ";
			cout << ele.second << '\n';
		}
	}
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发