輸入:
第一行n,k
第二行n個s[i]
第三行n個c[i]
最多剪掉k個數使
答案用二分找,做題時想到過,但沒有仔細去想。假設max已知∑s
[i]∗
c[i]
∑ s[
i]∗c
[i]=max*∑s
[i] ∑s[
i],即∑s
[i]∗
(c[i
]−ma
x)∑ s[
i]∗(
c[i]
−max
)= 0,只需要每次按(c[i]-max)排序,從k+1開始加到n,判斷sum是否符合,因為後面的數比前面的數大,如果後面的數相加小於0,前面的數也沒意義了。總之,要找乙個max使前面公式剛好去掉k個數時不小於0。
#include"bits/stdc++.h"
using
namespace
std;
int n,k;
double t[100005],s[100005],c[100005];
const
double eps=1e-6;
int check(double d)
int main()
printf("%.11f\n",r);
return
0;}
Hash Function 牛客網多校
這題竟然卡memset.一開始t了以為陣列開小了 就往大了搞.首先是判矛盾 如果i位置上的乙個數ary i 本來應該在ary i n j處 那j到i之間肯定不能有負數 字首和判斷一下 如果暫時沒矛盾 那就將從j到i 1的位置都向i連一條邊 因為ary i 這個數會出現在i這個位置就是因為j到i 1都...
inv 牛客網多校
給乙個1 3 n 1的a序列 和乙個2 4 n的排列的b序列 問歸併後最小逆序對數 肯定考慮用a 因為a是有序的 無腦解釋 首先有個結論 a序列插入時 a i 1 插入的最優位置一定在a i 的右邊 1,i b j a i 代表 1,n 內有多少b j 大於a i 對於每個a i 找乙個p使 1,i...
Prefix Sum 牛客網多校
分塊法真的奇妙 更新操作夠2000次就n k的統一更新一次 期間所有更新存起來 有查詢了先把之前已經更新好的陣列裡的內容取出來 然後把存起來還沒更新的操作算一遍即可 正解線段樹或樹狀陣列 線段樹迷之t include using namespace std define ll long long c...