看到这道题,应该都能想到用二分,那问题是怎么去判定呢? 我们考虑用前缀和(a1统计w,a2统计v),枚举每个矿石,,当前判定的值是x,如果该矿石的w>=x,a1[i]=a1[i-1]+1,a2[i]=a2[i-1]+v[i]:反之直接等于上一个就行了. 枚举完后,按照题目给的公式,更新它与s差值绝对值的最小值,得到最终答案. #include<bits/stdc++.h> typedef long long LL; using namespace std; const int N=2e5
题目描述 点进去看吧,说的不能再清楚了. Solution 看到数据规模不难想到二分 WWW,然后用个前缀和优化一下即可.注意上下界. #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; #define int long long const int MAXN=200010; int n,m,s; int maxx=-1,m
聪明的质监员 题目链接:https://www.luogu.org/problemnew/show/P1314 Y(W)随W的值增大而减小 二分W的值,找到最小的W使得Y(W)>S: 比较Y(W)和Y(W-1)与S的差值. 计算Y(W): O(n)预处理一维前缀和数组, O(m)暴力计算出Y(W) #include<cstdio> using namespace std; ][],w[],v[]; inline long long abs(long long x) { ) x=-x; r