水题。
前置芝士: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