小 T 是一名质量监督员,最近负责检验一批矿产的质量。这批矿产共有n 个矿石,从1到n 逐一编号,每个矿石都有自己的重量wi 以及价值vi。检验矿产的流程是:见图
若这批矿产的检验结果与所给标准值S 相差太多,就需要再去检验另一批矿产。小T不想费时间去检验另一批矿产,所以他想通过调整参数W 的值,让检验结果尽可能的靠近标准值S,即使得S-Y 的绝对值最小。请你帮忙求出这个最小值。
大体思路是二分W然后求Y验证,因为会有重复的区间,暴力求会超时,可以用每次二分的W来O(n)预处理 v[i]前缀和 和 一个区间的符合条件的w[i]数量,还有就是数据范围需要用long long(调了好久才发现QAQ)。
#include<iostream>
#include<cstdio>
#include<cmath>
#define ll long long
using namespace std;
const in