链接:
https://codeforces.com/problemset/problem/1476/B
题意:
给n个数,要求每个数占其左侧所有数的比例不到k%,可以对其中的数字进行增加,问增加的数最小是多少。
本题直接前缀和,从前往后遍历,记录每个的增加量即可。
代码如下:
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
#include<algorithm>
#include<string>
#include<string.h>
#include<random>
using namespace std;
typedef long long ll;
ll num[103];
ll sum[103];
ll mod = 1e9 + 7;
int main() {
int T;
cin >> T;
while (T--) {
int n, k;
cin >> n >> k;
ll ans = 0;
for (int i = 0; i < n; i++) {
cin >> num[i];
if (!i) {
sum[i] = num[i];
}
else {
sum[i] = num[i] + sum[i - 1];
}
if (i) {
if (100 * num[i] - k * sum[i - 1] > 0) {
ll x;
ll c = 100 * num[i] % k;
if (c) {
x = 100 * num[i] / k - sum[i - 1] + 1;
ans += x;
sum[i] += x;
}
else {
x = 100 * num[i] / k - sum[i - 1];
ans += x;
sum[i] +=x;
}
}
}
}
cout << ans;
cout << endl;
}
return 0;
}