ZJOI2010 貪吃的老鼠

2022-02-04 22:08:52 字數 2346 閱讀 7071

p2570 [zjoi2010]貪吃的老鼠

在ta的部落格檢視

顯然二分,最大流判定

要滿足兩個條件:

(1) 在任一時刻,乙隻老鼠最多可以吃一塊乳酪;

(2) 在任一時刻,一塊乳酪最多被乙隻老鼠吃。

先按照乳酪的邊界進行離散化, 變成num個塊,就可以知道每個時間有哪些乳酪了

把每個老鼠拆成num個點,

初步:每個老鼠的每個時間的乳酪連線o(len*speed)

首先每個老鼠每個時間段吃的是有限的,顯然保證(1)

但是不能保證(2)

改進:考慮讓每乙個乳酪在時間段只能

證明不會咕了

(總感覺不能一定能滿足存在一種方案使得總共時間不會超出)

卡精度啊,,,,,

inf設太大了

並且為了防止被inf卡,可以直接記錄ret表示流出流量,直接返回ret即可

#include#define reg register int

#define il inline

#define fi first

#define se second

#define mk(a,b) make_pair(a,b)

#define numb (ch^'0')

#define pb push_back

#define solid const auto &

#define enter cout<#define pii pair#define double long double

using

namespace

std;

typedef

long

long

ll;template

il void rd(t &x)

template

il void output(t x)

template

il void ot(t x)

template

il void prt(t a,int st,int nd)

namespace

miraclee[

2*(p*n+n+p)];

int hd[p],cnt=1

;int

p[n],st[n],nd[n];

intsp[n];

double mem[2*n];

intnum;

intsum;

void add(int x,int y,double

z)int

d[p];

ints,t;

double dfs(int x,double

flow)

}return flow-res;

}int

q[p],l,r;

bool

bfs()}}

return

false;}

int id(int x,int

y)bool che(double

mid)

sort(mem+1,mem+num+1

); num=unique(mem+1,mem+num+1)-mem-1

; --num;//

warning!!!

s=0,t=id(n,num)+1

;

for(reg i=1;i<=m;++i)

for(reg i=1;i<=n;++i)

}add(s,id(i,j),(

double)sp[i]*i*(mem[j+1]-mem[j]));}}

double flow=0,ret=0

;

while

(bfs())

}if(ret+eps>sum) return

true

;

return

false;}

void

clear()

bool cmp(int x,int

y)int

main()

for(reg i=1;i<=n;++i)

sort(sp+1,sp+n+1

,cmp);

sp[n+1]=0

;

for(reg i=1;i<=n;++i)

double l=0.0,r=1e7+3

;

for(reg i=1;i<=60;++i)

printf(

"%.10lf\n

",l);

}return0;

}}signed main()

/*author: *miracle*

*/

ZJOI2010 貪吃的老鼠

傳送門 to luogu 注意到老鼠的吃麵包時間是實數範圍內的,所以我們大膽地說 x1 x2 x3 xn ts i forall x 1 x 2 x 3 cdots x n le ts i x1 x 2 x 3 xn tsi 第 i ii 個老鼠可以做到,在 t tt 的時間內,將第 j jj 個麵...

ZJOI2010 貪吃的老鼠

點這裡看題目。注意到,這個題目的特點之一是時間是連續的。這意味著我們可以單純地關注數值而不太需要關心具體的時間。比如,乙隻老鼠在長度為 t 的時間段內,想要吃下 x k 的第 k 塊乳酪,則這一點能否做到,完全等價於 sum kx k 是否 le ts 想了好久如何轉化將時間和乳酪互相轉化,沒想到被...

ZJOI2010 數字計數

題目描述 給定兩個正整數a和b,求在 a,b 中的所有整數中,每個數碼 digit 各出現了多少次。輸入格式 輸入檔案中僅包含一行兩個整數a b,含義如上所述。輸出格式 輸出檔案中包含一行10個整數,分別表示0 9在 a,b 現了多少次。輸入輸出樣例 輸入 1 1 99 輸出 1 9 20 20 2...