對於每個女性,開乙個vector記錄可選的男性
掃一遍,可以o(1)算出該女性選擇第i個男性的期望(推推公式發現是等比數列)
有了這個就好辦啦,按女性為第一關鍵字男性第二關鍵字排個序,用樹狀陣列記錄下前面的女性選擇比當前大的男性的概率和
o(nlogn)
在算期望時涉及除法運算,精度誤差較大,所以要開long double或者強行不用等比數列直接乘多幾次
#include
#include
#include
#include
#define fo(i,a,b) for(int i=a;i<=b;i++)
using
namespace
std;
typedef
long
double db;
const
int n=500005;
db p,bit[n];
int n,m,num;
vector
a[n];
struct node
b[n];
bool cmp(node a,node b)
db get(int x)
void add(int x,db y)
int main()
fo(i,1,n)
}sort(b+1,b+num+1,cmp);
db ans=0;
fo(i,1,num)
printf("%.2lf",ans);
return
0;}
JSOI2015 染色問題
傳送門 雖然不是第一反應,不過還是想到了要容斥。題意轉化 需要求滿足 n m c 個條件的方案數。然後我們就列舉三個數 i,j,k 表示當前方案中,至少不用 k 種顏色,至少不塗 i 行 至少不塗 j 列。然後直接組合數算 式子不難看懂 最後容斥即可。那麼寫出來就是 ans sum n sum m ...
JSOI2015 子集選取
傳送門 看到這個資料範圍,就知道肯定是要找規律。如果把集合看成乙個長度為 n 的 01 串,0 表示沒有這個元素,1 表示有這個元素,那麼我們可以發現對於題中的約束關係,不同位上的 01 之間不會互相影響。那麼我們只需要對於只有一位也就是 n 1 的情況計算出方案 記為 x 那麼最後的答案就是 x ...
JSOI2015 最小表示
題目大意 盡可能多地去掉乙個有向無環圖上的邊,使得圖的連通性不變。思路 拓撲排序,然後倒序求出每個結點到出度為 0 的點的距離 d 再倒序遍歷每乙個點 x 以 d 為關鍵字對其出邊降序排序,嘗試加入每一條邊,若加邊之前兩點已經連通,則說明這條邊可以刪去。可以用bitset維護圖的連通性,注意原圖是有...