Codeforces1073D——Berland Fair
阿新 • • 發佈:2018-11-02
第一圈讀取所有數字的時候就可以去除那些加上sum大於T的了
然後記錄去除後第一圈的和sum,直接取模
然後接下來也是重複同樣的操作,當迴圈一次之後沒有任何一個可以買的就退出while
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
ll T;
const int N=2*1e5+50;
int a[N];
bool vis[N];
int x;
int main(void){
//freopen("data.txt","r",stdin);
scanf("%d%lld" ,&n,&T);
ll sum=0;
int cnt=0;
for(int i=0;i<n;i++){
scanf("%d",&x);
if(sum+x<=T){
a[cnt++]=x;
sum+=x;
}
}
ll ans=0;
if(sum>0){
ans=T/sum*cnt;
T%=sum;
}
while(T){
bool flag=false;
sum= 0;
int tmp=0;
for(int i=0;i<cnt;i++){
if(sum+a[i]<=T){
sum+=a[i];
tmp++;
flag=true;
}
}
if(!flag){
break;
}
ans+=(T/sum*tmp);
T%=sum;
}
printf("%lld\n" ,ans);
return 0;
}