CF1073D Berland Fair题解
这题只需一轮一轮的模拟,直至再也买不起糖果为止。
定义两个变量:,其中 表示当前这一轮买糖果消耗的钱, 表示买糖果的个数。
接着枚举店铺,如果:
则:
s+=a[i];
w++;
然后判断,如果 不等于 ,则(ans表示糖果个数)
ans+=t/s*w;
t%=s;
什么时候才算所有糖果都买不起?
我们只要判断在枚举完店铺后,判断 是不是大于 即可(因为如果 就代表没有买糖果,不过这个是在循环的判断条件里做的)。
代码
#include<bits/stdc++.h>
using namespace std;
long long n,t,a[200010],ans,s=1,w;
int main(){
cin>>n>>t;
for(int i=1;i<=n;i++){
cin>>a[i];
}
while(s>0){//判断所有糖果是否买不起。
s=w=0;
for(int i=1;i<=n;i++){
if(s+a[i]<=t){
s+=a[i];
w++;
}
}
if(s==0){
continue;
}
ans+=t/s*w;
t%=s;
}
cout<<ans<<endl;
r0;
}

浙公网安备 33010602011771号