Educational Codeforces Round 103 (Rated for Div. 2)B. Inflation
地址:http://codeforces.com/contest/1476/problem/B
题意:
从a2开始,每个值的计算方式为:pi=ai/(a0+a1+a2+...+ai-1)
使得每个pi都<=k的最少修改值
解析:
变形一下,ai*100<=k*sum(sum为ai之前的前缀和)
由于a1并没有(代码从1开始)算到p值里面,它只充当了一个分母的作用
所以每次加,都加在它头上即可,如果加在其他ai上,可能会使得p值变大
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<map> using namespace std; const int maxn = 3e5+50; const int inf=99999999; typedef long long ll; ll a[111]; int main() { int t; cin>>t; while(t--) { ll n,k; cin>>n>>k; for(int i=1;i<=n;i++) cin>>a[i]; ll sum = a[1] ; ll ans = 0 ; for(int i =2 ;i<=n;i++) { if(a[i]*100<=k*sum) { sum+=a[i]; } else { ll md =a[i]*100 / k ; if(a[i]*100%k!=0) md++; ans+=md-sum; sum=md; sum+=a[i]; } } cout<<ans<<endl; } } //9 //1 4 1 1 4 1 4 1 4