CF792B题解

水题。

前置芝士:deque

deque是STL的一个容器,全名为双端队列容器,具体定义方式和vector等相似。

有两个重要函数, p u s h push push_ b a c k ( ) back() back() , p o p pop pop_ f r o n t ( ) front() front(),前者可以向队尾插入元素,后者可以弹出(删除)队头元素。

正题

我们可以通过向队尾插入队头元素后弹出(删除)队头元素,从而实现换一个人,即将这个‘圈’转一格。
用deque代码实现就是:

a.push_back(a.front());
a.pop_front(); 

这个弄好之后,其他就都好办了。直接看有没有 o u t out out ,一个一个人旋转。
代码(无注释):

#include<iostream>
#include<deque>
using namespace std;
deque<int> a;
int n,k;
int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		a.push_back(i);
	}
	for(int i=0;i<k;i++)
	{		
		int s;
		cin>>s;
		s%=a.size();
		while(s--)
		{
			a.push_back(a.front());
			a.pop_front(); 
		}
		int val=a.front();
		a.pop_front();
		cout<<val<<" ";
	}
	return 0;
}

有注释:

#include<iostream>
#include<deque>
using namespace std;
deque<int> a;
int n,k;
int main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{ 
		a.push_back(i);
	}//输入 
	for(int i=0;i<k;i++)
	{		
		int s;
		cin>>s;
		s%=a.size();//注意要取模 
		while(s--)//一个一个旋转 
		{
			a.push_back(a.front());//插入队首项 
			a.pop_front(); //弹出 
		}
		int val=a.front();
		a.pop_front();//out直接弹出
		cout<<val<<" ";//输出 
	}
	return 0;
}

莫抄题解。

t h e   e n d the\ end the end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值