团体程序设计天梯赛 L2-032 彩虹瓶 (25分)

题目链接:

L2-032 彩虹瓶 (25分)

思路:

用栈和队列可以很方便地进行模拟;
中途判断是否会出现工人不开心的情况;

代码:

#include<bits/stdc++.h>

using namespace std;

bool vst[1005];

int main() {
#ifdef MyTest
	freopen("Sakura.txt", "r", stdin);
#endif
	int n, m, k;
	cin >> n >> m >> k;
	while(k--) {
		bool flag = true;
		memset(vst, 0, sizeof(vst));
		stack<int> st;
		queue<int> que;
		for(int i = 1; i <= n; i++) { int x; cin >> x; que.push(x);}
		for(int i = 1; i <= n && flag; i++) {
			if(st.size() && i == st.top()) { st.pop(); continue; }
			if(vst[i]) { flag = false; break; }
			while(que.front() != i) {
				int x = que.front();
				que.pop();
				st.push(x);
				vst[x] = true;
				if(st.size() > m) { flag = false; break; }
			}
			que.pop();
		}
		puts(flag ? "YES" : "NO");
	}
	return 0;
}
posted @ 2020-01-26 17:21  YuhanのBlog  阅读(387)  评论(0编辑  收藏  举报