当前位置: 代码迷 >> 综合 >> codeforces 1476B Inflation
  详细解决方案

codeforces 1476B Inflation

热度:39   发布时间:2023-12-02 23:11:51.0

链接:

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;
}