洛谷:P2952 [USACO09OPEN]牛线Cow Line:题解

题目链接:https://www.luogu.org/problemnew/show/P2952

分析:

这道题非常适合练习deque双端队列,~~既然是是练习的板子题了,建议大家还是练练deque,下面来简单讲解一下deque的一些操作。

clear()clear()clear():清空队列

pushpushpush_back()back()back():从尾部插入一个元素。

pushpushpush_front()front()front():从头部插入一个元素。

deque双端队列的先进就在这里,它可以两端都支持同样的操作。

size()size()size():返回队列元素个数

front()front()front():返回队列首部元素。

back()back()back():返回尾部元素。

poppoppop_back()back()back():弹出队尾元素。

poppoppop_front()front()front():弹出队首元素。

empty()empty()empty():检查队列是否为空。

.........
.........
.........
然后输出的方法多种多样,我选择使用迭代器,具体详见代码。

代码:

#include<cstdio>
#include<deque>
using namespace std;
deque<int>q;
int main()
{
	int s;
	scanf("%d\n",&s);
	int cnt=0;
	for(int j=1;j<=s;j++)
	{
		char c1,c2;
		int c3;
		scanf("%c %c",&c1,&c2);
		if(c1=='A')
		{
			if(c2=='L')
			{
				q.push_front(++cnt);
			}
			else
			{
				q.push_back(++cnt);
			}
			if(j!=s)
			scanf("\n");
		}
		else
		{
			scanf("%d",&c3);
			if(j!=s)
			scanf("\n");
			if(c2=='L')
			{
				for(int i=1;i<=c3;i++)
				{
					q.pop_front();
				} 
			}
			else
			{
				for(int i=1;i<=c3;i++)
				q.pop_back();
			}
		}
	}
	deque<int>::iterator it=q.begin();
	for(it=q.begin();it!=q.end();it++)
	{
		printf("%d\n",*it);
	}
	return 0;
}
全部评论

相关推荐

02-28 15:13
已编辑
西北工业大学 Java
希望各位大佬可以指点一下😭
King987:需要点评吗?发给我的话,我可以给你出一期作品哦
点赞 评论 收藏
分享
不会做题的小熊:我感觉我就算是找不到工作,我也不会作弊进去,作弊进去感觉一方面是自己不踏实,其次就是都靠作弊了,那后面肯定工作的心态是不一样的,没有一种内驱力。
点赞 评论 收藏
分享
牛客52811839...:实习要写出来业务和产出,你这写的像流水账没人看。项目经历也没有,换个极简简历试试
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务