比賽鏈結: a
gpa題意:給出kanade的n門課的學分si和成績ci,kanade的gpa計算方法如下:
解析:典型01分數規劃問題,按模板做就好,
01分數規劃問題:所謂的
01分數規劃問題就是指這樣的一類問題,給定兩個陣列,
a[i]
表示選取
i的收益,
b[i]
表示選取
i的代價。如果選取
i,定義
x[i]=1
否則x[i]=0
。每乙個物品只有選或者不選兩種方案,求乙個選擇方案使得
r=sigma(a[i]*x[i])/sigma(b[i]*x[i])
取得最值,即所有選擇物品的總收益
/總代價的值最大或是最小。
這裡給出
n個門課,每門課i收益si*ci代價si
,選擇n-k門課
,詢問∑si*ci/∑si
的最大值。我們可以直接二分這個最大值
x,而∑si*ci/∑si≥
x就等價於
∑si*ci−
x*∑si≥
0。所以我們發現二分好x後按si*ci−x*s
i排序,然後把最大的
n-k門課選出來求此時這n-k門課的∑si*ci−
x*∑s
i,如果大於0,那麼當前二分的x就是合法的,可以繼續向右二分找最x。
**:
#include using namespace std;
typedef long long ll;
const ll maxn=1e5+5;
const double eps=1e-8;
int n,k;
struct node
p[maxn];
double t[maxn];
bool judge(double x)
return ans>=0;}
int main()
cout
take
題意:有 n 個箱子,第 i 個箱子有 p[i] 的概率出現大小為 d[i] 的鑽石 現在 小a 一開始手裡有乙個大小為 0 的鑽石,他會根據 i 從小到大開啟箱子, 如果箱子裡有鑽石且比小 a 手中的大,那麼小 a 就會交換手中的鑽石和箱子裡 的鑽石 求期望的交換次數。
解析:
來自牛客多校群,侵刪。
參考:
**:
#includeusing namespace std;
typedef long long ll;
const int mod=998244353;
const int maxn=1e5+5;
int p[maxn],d[maxn];
int len,ha[maxn];
int n,bit[maxn];
ll pow_mod(ll n,ll k,ll mod) //快速冪求n^k餘m的結果
return res;
}inline int lowbit(int i)
void add(int x,int v)
}int sum(int x)
return res;
}int main()
sort(ha+1,ha+1+n);
len=unique(ha+1,ha+n+1)-(ha+1);
for(int i=1;i<=n;i++)//離散化d
d[i]=lower_bound(ha+1,ha+len+1,d[i])-ha;
for(int i=0;i<=len;i++)//初始化樹狀陣列
bit[i]=1;
int ans=0;
for(int i=1;i<=n;i++)
printf("%d\n",ans);
return 0;
}
牛客網暑期ACM多校訓練營(第五場)
二分答案,然後就轉化為是否滿足 frac d sum s i c i sum s i d sum s i c i d 0 顯然科目越少gpa越高,於是去掉最小的k個判斷即可。include define rep i,a,b for int i a i b i define per i,a,b for...
牛客網暑期ACM多校訓練營(第五場)F take
題目意思就是從前往後有n個箱子,每個箱子中有p i 的概率會出現價值為d i 的鑽石,當箱子內的鑽石價值大於當前手上的鑽石的價值的時候,將手上鑽石跟箱子內的鑽石交換,問最後交換次數的期望。思路 結果要求的是交換次數的期望,我們可以將每個箱子交換的期望求出來相加即可。那麼顯而易見的是,當前箱子交換的概...
2020牛客暑期多校訓練營(第五場)
總結 f題添老師一發ac,i 題起初不會做在想怎麼化簡那個式子,後來就直接畫出了最優的圖,然後猜了一發2 3過了。ef 一級目錄 一級目錄 一級目錄 乙個包括n個音符的陣列,音符按下標1 n排列,表示音符由低到高。有兩個操作 drop 2 將第二高的音符移到最低的位置 即將倒數第二個移到第乙個。in...