bzoj2244 SDOI2011 攔截飛彈

2022-04-30 04:03:08 字數 2246 閱讀 5696

cdq。。還真是。。

一開始自己寫,設f[i]為以i結尾的最優方案,fn[i]為以i結尾的最優方案數,然後cdq完了第一問就出來了,還順便把總最優方案數算了,

and then? mengbier

然後各路%啊,乙個下午+一晚上就交代了

怎麼做呢?我們再cdq出另乙個f和fn表示以i開頭的最優方案和方案數

然後想一想i在這 l——————i——————r

然後 f[0][i]就是l~i的最優方案了,f[1][i]就是i~r的最優方案

那麼兩個一合併,再減去重複計算的i位置,假如等於最優方案,說明i出現了fn[0][i]*fn[1][i](一一組合嘛)

完成。

#include#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

double

ld;int

n;int s[51000];ld g[51000

];int lowbit(int x)

void change(int x,int

k,ld fan)

else

if(s[x]==k)g[x]+=fan;

x+=lowbit(x);

}}void clean(intx)}

int getmax(int x,ld &fan)

else

if(s[x]==ret)fan+=g[x];

x-=lowbit(x);

}return

ret;

}struct

node

a[51000],b[51000

];bool cmpx(node n1,node n2)

bool cmpx2(node n1,node n2)

bool cmpy(node n1,node n2)

bool cmpy2(node n1,node n2)

int lslen,ls[51000

];void

lsh()

int f[2][51000];ld fn[2][51000

];void cdq(int l,int

r)

else

if(d==f[0][a[i].x])fn[0][a[i].x]+=fan;

}for(int i=l;i<=mid;i++)clean(a[i].z);

sort(a+mid+1,a+r+1

,cmpx);

cdq(mid+1

,r);

sort(a+l,a+r+1

,cmpy);

}void cdq2(int l,int

r)

else

if(d==f[1][a[i].x])fn[1][a[i].x]+=fan;

}for(int i=l;i<=mid;i++)clean(a[i].z);

sort(a+mid+1,a+r+1

,cmpx2);

cdq2(mid+1

,r);

sort(a+l,a+r+1

,cmpy2);

}ld cao[

51000

];int

main()

else

if(mmax==f[0][i])sum+=fn[0

][i];

printf(

"%d\n

",mmax);

for(int i=1;i<=n;i++)a[i]=b[n-i+1

];

for(int i=1;i<=n;i++)a[i].z=n-a[i].z+1

;

for(int i=1;i<=n;i++)f[1][i]=1,fn[1][i]=1

; cdq2(

1,n);

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

if(f[0][i]+f[1][i]-1==mmax)

cao[i]=fn[0][i]*fn[1

][i];

for(int i=1;i"

%.5lf

",cao[i]/sum);

printf(

"%.5lf\n

",cao[n]/sum);

return0;

}

SDOI2011 BZOJ2244 攔截飛彈

description 某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度 並且能夠攔截任意速度的飛彈,但是以後每一發炮彈都不能高於前一發的高度,其攔截的飛彈的飛行速度也不能大於前一發。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還...

Bzoj2244 SDOI2011 攔截飛彈

傳送門 每個飛彈有時間,高度,速度 求時間遞增,高度,速度不降的最長的序列 然後還要求最長序列的方案以及每個飛彈在最長序列中的方案 這個就是偏序問題辣,正反兩遍求出每個飛彈為結尾開頭的序列最長長度 判斷是否在最長序列就二者相加判斷 然後記錄下方案,用do uble d ou bl e,lo nglo...

bzoj 2244 SDOI2011 攔截飛彈

某國為了防禦敵國的飛彈襲擊,發展出一種飛彈攔截系統。但是這種飛彈攔截系統有乙個缺陷 雖然它的第一發炮彈能夠到達任意的高度 並且能夠攔截任意速度的飛彈,但是以後每一發炮彈都不能高於前一發的高度,其攔截的飛彈的飛行速度也不能大於前一發。某天,雷達捕捉到敵國的飛彈來襲。由於該系統還在試用階段,所以只有一套...