codeforce-E. Superhero Battle

输入h n
然后一个n的数组
在数组上循环跑 h+数组中相应的值 判断第一次出现h<=0的时候跑了多少个数

#include 
using namespace std;
typedef long long ll;
#define N 200005
ll h,n,temp;
ll add=0;
ll h0;
string s1;
vector<pair<ll,ll>>vec;
ll arr[N];
int main(){
#ifdef LOCAL
	freopen("in.txt","r",stdin);
	//freopen("out.txt","w",stdout);
#endif
	scanf("%lld%lld",&h,&n);
	h0=h;
	ll minl=0;
	for(ll i=0; i<n; i++){
		scanf("%lld",&arr[i]);
		add+=arr[i];
		if(add<minl){
			minl=add;
			vec.push_back({i+1,minl});
		}
	}
	if(add==0){
		if(h+minl<=0){
			for(ll i=0; i<vec.size();i++){
				if(h+vec[i].second<=0){
					printf("%lld",vec[i].first);
					return 0;
				}
			}
		}
		printf("-1");
		return 0;
	}
	if(add>0){
		if(h+minl>0){
			printf("-1");
			return 0;
		}
		for(ll i=0; i<vec.size();i++){
			if(h+vec[i].second<=0){
				printf("%lld",vec[i].first);
				return 0;
			}
		}
	}
	ll ans=(h/(-1*add))*n;
	h=h%(-1*add);
	while(h+minl<=0&&h<=h0){
		h-=add;
		ans-=n;
	}
	h+=add;
	ans+=n;

	for(ll i=0; i<vec.size();i++){
		if(h+vec[i].second<=0){
			printf("%lld",vec[i].first+ans);
			return 0;
		}
	}

	return 0;
}

你可能感兴趣的:(codeforce-E. Superhero Battle)