专栏文章
题解:P1563 [NOIP2016 提高组] 玩具谜题
P1563题解参与者 2已保存评论 2
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @miqk4bwm
- 此快照首次捕获于
- 2025/12/04 06:06 3 个月前
- 此快照最后确认于
- 2025/12/04 06:06 3 个月前
题意
依次给你 个围成一圈的人的内外方向及其名字,有 条信息。
从 号人数起,依次执行每条信息中按上一条信息结束的人的方向往左或右数 个人,左时方向 ,右时方向 。
输出执行完最后一条信息后数到的人的名字。
解题分析
明显应该使用 模拟 算法来模拟数人的过程。
根据每条信息给的数的方向,和小人的朝向,分如下四种情况:
- ,朝向为内,顺时针数。
- ,朝向为内,逆时针数。
- ,朝向为外,顺时针数。
- ,朝向为外,逆时针数。
顺时针时位数减 ,逆时针时位数加 。
溢出后检查并补一下 就可以了。
代码
CPP#include<bits/stdc++.h>
using namespace std;
struct node{
int x;
string s;
}man[100005];
int n,m,now=1,k,p;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>man[i].x>>man[i].s;
for(int i=1;i<=m;i++){
cin>>k>>p;
if(!k)p=-p;
if(man[now].x==1)p=-p;
now+=p;
if(now>n)now-=n;
if(now<=0)now+=n;
}
cout<<man[now].s;
return 0;
}
相关推荐
评论
共 2 条评论,欢迎与作者交流。
正在加载评论...