題面:乙個一維區間上,從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年,並在全球木馬查殺 反間諜工具排行中遙遙領先,獲得多次海內外專業 盛譽。可以對驅動器 記憶體程序和目錄進行掃瞄,準確檢測並徹底...