codevs 1128 飛彈攔截

2021-07-22 02:14:18 字數 1271 閱讀 3800

codevs 1128 飛彈攔截

這題簡略看了一下真沒啥思路,而且是2023年的普及題目啊!!瞬間感覺智商回到西元前(霧)。然後就想只有兩個,每乙個飛彈只有兩種選擇,給一號攔截或者二號攔截,列舉?2^n,好像當年給了20分,資料範圍如下:

對於10%的資料,n = 1

對於20%的資料,1 ≤ n ≤ 2

對於40%的資料,1 ≤ n ≤ 100

對於70%的資料,1 ≤ n ≤ 1000

對於100%的資料,1 ≤ n ≤ 100000,且所有座標分量的絕對值都不超過1000。

不明白前兩個點是幹什麼的。然後看到1e5想一想是nlogn的,那就八成是排序,先按離一號攔截點距離從小到大排序,在陣列中選定乙個一號最多能攔截到的飛彈,那麼左邊的都能攔截到,右邊都不能,這時二號攔截系統的半徑就是這些飛彈中離它最遠的那個到它的距離,感覺是n^2的,居然就這樣有了70分?!。。。n^3是什麼神奇演算法。然後發現找最大值的操作是對連續區間,那就上線段樹吧,區間最大值。好像常數有點大,加了優讀都要跑200+ms。

//qwsin

#include

#include

#include

#include

using namespace std;

const int maxn=100000+10;

const int inf=(1

<<30);

intx[maxn],y[maxn],id[maxn];

int n,x1,x2,y1,y2;

inline int

read()

for(;ch>='0'&&ch<='9';ch=getchar()) ret=ret*10+ch-'0';

return ret*ok;

}int f(int

x)int dis(int x1,int y1,int x2,int y2)

int cmp(int a,int b)

struct node

}*root;

#define mid ((l+r)>>1)

void up(node* &p)

void build(node* &p,int l,int r)

build(p->lc,l,mid);

build(p->rc,mid+1,r);up(p);

}int query(node* p,int l,int r)

int main()

codevs天梯 飛彈攔截

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

codevs 攔截飛彈 1044

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

codevs1044攔截飛彈

這個題第一問是求最長下降子串行,第二問可以轉化成求最長上公升子串行,為什麼?因為我們每遇到有hi hj的情況 i j 都要再使用一枚飛彈,因為飛彈只處理hi hj的情況嘛,很好理解的吧 所以 如下 完全可以更短 include include include include using namesp...