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

 

posted @ 2021-02-01 10:40  liyexin  阅读(105)  评论(0编辑  收藏  举报