题意:一个人 有T块钱 有一圈商店 分别出售 不同价格的东西 每次经过商店只能买一个 并且如果钱够就必须买
这个人一定是从1号店开始的!(比赛的时候读错了题,以为随意起点。。。)问可以买多少个
思路:这个人有T块钱 走一圈之后可以买num个 花了sum块钱 那么走第二圈的时候 能买的东西是一圈的子集
T/sum 表示还能够执行多少次买东西买完之后T%=sum继续递归上述步骤 直到 T=0||num=0 也就是没钱或者 一个都
买不起
参考:https://blog.csdn.net/STcyclone/article/details/83418853#1073C_Vasya_and_Robot_69 大佬的博客
include<bits/stdc++.h> using namespace std; typedef long long ll; int a[300000]; int main(){ int n;ll t; cin>>n>>t; for(int i=0;i<n;i++){ scanf("%d",&a[i]); } ll ans=0; while(t){ ll sum=0; ll num=0; for(int i=0;i<n;i++){ if(t>=a[i])t-=a[i],sum+=a[i],num++,ans++; } if(!num)break; ans+=t/sum*num; t%=sum; } cout<<ans<<endl; }