AcWing 5525. 炮弹
原题链接
简单
作者:
O₂
,
2024-02-25 20:13:46
,
所有人可见
,
阅读 23
思考
依次模拟即可,注意特判奶牛一直在区间里重复,所以要用一个计数器,判断奶牛在区间里走了多少次,如
果移动的次数超过一个很大的数(比如1e6),就代表奶牛肯定已经循环一圈了,就break掉
C++ 代码
#include<algorithm>
#include<iostream>
#include<cstring>
using namespace std;
const int N=1e5+10;
int n,s,op[N],v[N];
bool st[N];
int main(){
cin>>n>>s;
for(int i=1;i<=n;i++) cin>>op[i]>>v[i];
int i=s,f=1,cnt=0,sum=1;
int a=0;
while(i>0&&i<=n){
if(a>=1e6) break;
if(!st[i]&&op[i]&&sum>=v[i]){
cnt++;
st[i]=true;
}
if(!op[i]){
sum+=v[i];
if(f==1) f=-1;
else f=1;
}
i+=sum*f;
a++;
}
cout<<cnt<<endl;
return 0;
}