P10132题解
题目传送门
分析
这是一道典型的模拟题。根据题意模拟,并记录好炮弹 Bessie 的位置、体力与方向即可。
对于题目所说的无限长时间,其实不必想的太复杂,记录循环执行次数
完整代码
#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;
}