洛谷 P1563 [NOIP2016 提高组] 玩具谜题 题解 C/C++

//#define LOCAL
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <cctype>
#include <sstream>
#define inf 0x3f3f3f3f
#define eps 1e-6
using namespace std;
#define clr(x) memset(x,0,sizeof((x)))
const int maxn = 1e5+10;
#define MAX(a,b,c) ((a)>(b)?((a)>(c)?(a):(c)):((b)>(c)?(b):(c)))
#define _max(a,b) ((a) > (b) ? (a) : (b))
#define _min(a,b) ((a) < (b) ? (a) : (b))
#define _for(a,b,c) for(int a = b;a<c;a++)

int n,m;
struct Toy
{
    
    
	int dir;
	char name[20];
};
int main()
{
    
    
#ifdef LOCAL 
	freopen("data.in","r",stdin);
	freopen("data.out","w",stdout);
#endif
	Toy toy[maxn];
	cin>>n>>m;
	for(int i = 0;i<n;i++) {
    
    //存的时候是按逆时针存的
		scanf("%d%s",&toy[i].dir,toy[i].name);
	}
	int a,b,p = 0;
	while(m--) {
    
    
		cin>>a>>b;
		if(toy[p].dir==0) {
    
    //工具人朝内
			if(a==0) {
    
    //向左  相当于顺时针
				p = (p+n-b)%n;
			}
			else if(a==1) {
    
    //向右  相当于逆时针
				p = (p+b)%n;
			}
		}
		else if(toy[p].dir==1) {
    
    //朝外  道理同上 反过来
			if(a==0) {
    
    
				p = (p+b)%n;
			}
			else if(a==1) {
    
    
				p = (p+n-b)%n;
			}
		}
	}
	cout<<toy[p].name;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Jason__Jie/article/details/113523733
今日推荐