P1160 队列安排

看到队列安排我居然真的模拟队列 hhh 结果G了

错误代码 

#include <bits/stdc++.h>
using namespace std;
int n,m;
int main(){
	deque<int>deq1;
    deque<int>deq2;
	cin>>n;
	for(int i=1;i<=n;i++){
		deq1.push_back(i);
	}
	//push的意思是往前压 所以front自然就是最前面的1
	//deque有前有元素的返回 也可以往前后方 前后删除 建议用deque


	for(int i=2;i<=n;i++){
		int k,p;cin>>k>>p;
		if(p==1){
			//由于pop没有右边pop的函数 所以只能从左往右 
			while(deq1.front()!=k){
				deq2.push_front(deq1.front()); //deq1最前面的不变顺序放在 deq2里面 
				deq1.pop_front();
			}
			//到了k的位置 但是还要再来一次
			deq2.push_front(deq1.front());
			deq1.pop_front();
			//此时空出右边的位置可以插入i
			deq1.push_front(i);

			//然后补回
			while(deq2.size()!=0){//拿回的时候deq2后面的直接放在deq1的最前面就行
				deq1.push_front(deq2.back());

			}
		}
		else if(p==0){//左边 左边遍历
			while(deq1.front()!=k){
				deq2.push_front(deq1.front()); //deq1最前面的不变顺序放在 deq2里面 
				deq1.pop_front();
			}
			//此时空出左边的位置可以插入i
			deq1.push_front(i);

			//然后补回
			while(deq2.size()!=0){//拿回的时候deq2后面的直接放在deq1的最前面就行
				deq1.push_front(deq2.back());

			}
		}
	}


	cin>>m;
	for(int i=1;i<=m-1;i++){
		int len=0;cin>>len;
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值