CF792B题解

水题。

前置芝士:deque

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

有两个重要函数,\(push\)_ \(back()\) , \(pop\)_ \(front()\),前者可以向队尾插入元素,后者可以弹出(删除)队头元素。

正题

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

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

这个弄好之后,其他就都好办了。直接看有没有 \(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;
}

莫抄题解。

\(the\ end\)

posted @ 2021-07-27 20:26  WiccldCute  阅读(56)  评论(0)    收藏  举报