P10132题解

· · 题解

题目传送门

分析

这是一道典型的模拟题。根据题意模拟,并记录好炮弹 Bessie 的位置、体力与方向即可。

对于题目所说的无限长时间,其实不必想的太复杂,记录循环执行次数 ss < 1145141 即可。

完整代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,s,ans;//s指Bessie当前位置,ans记录答案
int q[100005],v[100005];
bool vis[100005];//目标是否已经被打击
signed main(){
    ios::sync_with_stdio(0);cin.tie(nullptr);cout.tie(nullptr);
    int k=1;//体力值
    int fx=1;//跳跃方向
    cin>>n>>s;
    for(int i=1;i<=n;i++)
        cin>>q[i]>>v[i];
    int ss=0;
    while(ss<1145141){
        ss++;
        if(q[s]){
            if(k>=v[s]&&!vis[s]){ans++;vis[s]=true;}
        }
        else {
            fx=-fx;//反转方向
            k+=v[s];
        }
        s+=fx*k;
        if(s>n||s<1)break;//跳出数轴时退出。
    }
    cout<<ans;
}