防線 s 題解

2021-09-27 04:24:20 字數 1610 閱讀 9418

題面:乙個一維區間上,從s[i

]s[i]

s[i]

到e [i

]e[i]

e[i]

這段上每隔d[i

]d[i]

d[i]

的距離放乙個防具(s[i

]s[i]

s[i]

必須放,e[i

]e[i]

e[i]

不一定要放),執行n

nn組,問是否存在乙個點上有奇數個防具(資料保證最多只有乙個點上為奇數個)。

暴力列舉???想多了吧,就憑這資料範圍,我是覺得不合適的。

放棄,換思路(確實,我覺得這題唯一的難點就在想思路上)。

考慮分治,因為最多只有乙個點上有奇數個防具,所以當它分成兩塊時,只有一塊的防具總和為奇數個,沒問題對吧,然後就可以二分了嘛。

列舉最左邊到mid上的防具總和(∑i=

1mid

(min

(mid

,e[i

])−s

[i])

/d[i

]+

1\sum_^(min(mid,e[i])-s[i])/d[i]+1

∑i=1mi

d​(m

in(m

id,e

[i])

−s[i

])/d

[i]+

1,前提為(s[i

]<=m

id

s[i]<=mid

s[i]

<=m

id)),如果這個值為奇數,那麼答案就縮小到l到mid中,如果不是,那答案只可能在mid到r中,一直搜到最小為止,輸出答案的就是看搜到最小後當前位置r(**是按照左開右閉寫的),因為此時l=r-1,所以防具數就是最左邊到r的防具數減去最左邊到l的防具數,然後判斷一下輸出即可。

上**

#include

using

namespace std;

#define fi(a) freopen(a,"r",stdin)

#define fo(a) freopen(a,"w",stdout)

#define sfd(n) scanf("%d",&n)

#define sfld(n) scanf("%lld",&n)

#define f1(i,l,r) for(int i=l;i<=r;++i)

#define pfdn(n) printf("%d\n",n)

#define plds(n) printf("%lld ",n)

const

int n=

2e5+10;

int t,n;

long

long l,r;

long

long s[n]

,e[n]

,d[n]

;void

freo()

void

init()

intche

(long

long k)

void

work()

}void

prin()

intmain()

這**真醜,是吧(但我就是不想改)

括號樹 s 題解

原因是我在考場上想出了正解卻沒調出來。題目鏈結 題面讓你求一棵樹上能匹配的括號串的個數。呃,前面的20分直接暴力過 在加上是鏈隨便打一下就好了啦 我就不解釋了 明明是沒寫然後又不想寫 然後說一下由於考場上沒調出來而交的55分 吧。首先先來看一下鏈的性質。明顯的一件事,形如 這樣的鏈,如果要把外層的括...

0x00基本演算法(練習)5 防線(題解)

題目鏈結 題意 達達學習數學競賽的時候受盡了同仁們的鄙視,終於有一天.受盡屈辱的達達黑化成為了黑暗英雄怪獸達達。就如同中二漫畫的情節一樣,怪獸達達打算毀掉這個世界。數學競賽界的精英 lqr 打算阻止怪獸達達的陰謀,於是她集合了一支由數學競賽選手組成的超級行動隊。由於隊員們個個都智商超群,很快,行動隊...

木馬防線2005 4 8 5

木馬防線2005,是一款面向個人使用者的專業級反木馬資訊保安產品。該軟體的前身是antiy ghostbusters,被稱為 捉鬼隊 在美國及歐洲各國已經為使用者提供服務4年,並在全球木馬查殺 反間諜工具排行中遙遙領先,獲得多次海內外專業 盛譽。可以對驅動器 記憶體程序和目錄進行掃瞄,準確檢測並徹底...