P1563 [NOIP2016 提高组] 玩具谜题

1.题目介绍

2.题解

2.1 模拟

思路

有一个大坑,题目给你的小人顺序是按逆时针给的,不是顺时针!!!跟顺时针相比掉一下顺序就行。
看似一共有四种情况:[0,0],[0,1],[1,0],[1,1], 其实可以简化分为两种情况,因为[0,0]和[1,1]都代表你要顺时针数,[1,0],[0,1]都代表你要逆时针数。
这里还要考虑他是一个环形的情况,(这里给的小人是逆时针给的,所以实际是相反过来,以下思路给的是顺时针去看的时候)
当顺时针转的时候,如果超出了总人数n,可以使用求余的方式 (curr + num)% n即可
当逆时针转的时候, 如果出现了负数,可以采用减法中借位的思路,跟上一级借一个n过来即可,(curr + )

代码

#include<bits/stdc++.h>
using namespace std; 
int main(){
	int n, m;
	cin >> n >> m;
	pair<int, string> memPair[n];
	for(int i = 0; i < n; i++){
		int dir;
		string job;
		cin >> dir >> job;
		memPair[i] = make_pair(dir, job);
	}
	
	int curr = 0;
	for(int j = 0; j < m; j++){
		int lOrR, num;
		cin >> lOrR >> num;
		if(memPair[curr].first == lOrR){
			curr = (curr - num + n) % n; 
		}
		else {	
			curr = (curr + num) % n;
		}
	}
	cout << memPair[curr].second;
}
posted @   DawnTraveler  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示