题解 AT_joi2010yo_b すごろく

· · 题解

Solution

Ideas

这道题只需要照着题意,模拟即可。

可以从 1 到 m 枚举,一轮中让 t 先加 b_i,再加上 a_t。若超过了 n,那么输出当时的 i 即可。

Code

#include <iostream>
using namespace std;
long long a[1002], b[1002], n, m, t=1; // 不开 long long 见祖宗
int main(){
    cin>>n>>m;
    for(long long i=1; i<1+n; ++i) cin>>a[i];
    for(long long i=1; i<1+m; ++i) cin>>b[i];
    for(long long i=1; i<1+m; ++i){ // 从 1 到 m 的顺序
        t+=b[i]; // 计算该轮 t 的值,如题
        t+=a[t];
        // 容易搞错成 t=t+b[i]+a[t],但题目说了是先加 b[i] 在加 a[t],a[t] 的 t 是加上了 b[i] 的 t,我前几次就是这样爆 0 的
        if(t>=n) return cout<<i<<'\n', 0;
        // return cout 的意思是先输出,在直接结束,at 不换行,爆 0 两行泪
    }
    return 0;
}

谢谢观看,若有问题欢迎在评论区留言,我会一一回复。

小可的 20 号题解。