AcWing 3767. 最小的值
原题链接
简单
作者:
Fa1th_
,
2021-07-17 00:31:07
,
所有人可见
,
阅读 286
思路
模拟 + 贪心
- 要求 $ \sum_{i=0}^{n} {ai × pi} > \sum_{i=0}^{n} {bi × pi} $ 即 $ \sum_{i=0}^{n} {(ai - bi) × pi} > 0$
a[i] = b[i]
时, a[i] - b[i] = 0
不需要考虑;
a[i] < b[i]
时, 是负数,要使p[i] 最小,p[i] 取 1, 计数为x;
a[i] > b[i]
时, 计数为y,要使$ \sum_{i=0}^{n} {(ai - bi) × pi} > 0$ 且max p 最小,需要使最大值最小,所以要平分;
y * t > x
即 y * t >= x + 1
所以t >= (x + 1) / y
(a/b上取整 = (a+b)/b 下取整)
- y = 0 时输出-1
C++ 代码
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110;
int a[N], b[N];
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i ++) cin >> a[i];
for(int i = 0; i < n; i ++) cin >> b[i];
int x = 0, y = 0;
for(int i = 0; i < n; i ++)
{
if(a[i] < b[i]) x++;
else if(a[i] > b[i]) y++;
}
if(!y) cout << -1 << endl;
else cout << (x + y) / y << endl;
return 0;
}
时间复杂度:O(n)