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;
}
分类:
洛谷
, 数据结构与算法 / 模拟
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了