欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

P1563 [NOIP2016 提高组] 玩具谜题

程序员文章站 2024-03-19 09:25:16
...

题目链接

https://www.luogu.com.cn/problem/P1563传送门

具体题目我就不复制了,大家自己去链接看。
我们可以发现
朝外(1),左(0):逆时针,+

朝外(1),右(1):顺时针,-

朝内(0),左(0):顺时针,-

朝内(0),右(1):逆时针,+

所以用个异或就ok了。异或结果不为0 ++,为0 --;
建立两个数组,一个记录朝向,一个记录姓名。然后直接求下标,相当于环形链表。

代码

#include <bits/stdc++.h>
using namespace std;


int main(){

    int m,n;
    cin >> m >> n;
    int l[m];
    string s[m];
    int ans = 0;
    for(int i = 0;i < m;i++) cin >> l[i] >> s[i];
    int a,b;
    for(int i = 0;i <n;i++){
        cin >> a >> b;
        if(a ^ l[ans]) ans = (ans + m + b) % m;// 加 m 保证下标是正的情况下进行+
        else ans = ((ans + m - b) % m + m) % m;// 取模后再加 m 保证下标不为负
    }
    cout << s[ans];
    return 0;
}

上一篇: MD5加密

下一篇: vue重点难点记录