傳送門
由於這道題是許可權題,所以題面我也放在這裡了(我不是許可權狗)。
【題目背景】
小q最近喜歡上了一款遊戲,名為《艦隊connection》,在遊戲中,小q指揮強大的艦隊南征北戰,從而成為了一名dalao。在遊戲中,不僅船隻能力很重要,搭配合適的裝備更是如虎添翼。小q潛心研究配裝三十年,終於——把裝備湊齊了。
【題意描述】
小q有n艘船,m件裝備。為了簡單起見,我們假定每艘船都只能攜帶一件裝備,且可以攜帶任何一件裝備。每艘船和每件裝備都有自己的能力值。船攜帶裝備時,能力值為兩者相乘。另外,小q還有可能對船或裝備進行改修(強化)。改修成功會讓能力提公升,失敗則會讓能力降低。由於最佳配置已經用了無數次了毫無挑戰性,因此,小q並不打算直接使用最佳配置,而是使用相對弱一些的第k佳配置。具體來說,每次選擇船隻時,由於關卡限制,小q需要在編號為l到r的船隻中選擇一艘,並在編號為a和b之間的裝備選擇一架,組成出擊用的船隻。於是,小q總共有(r-l+1)*(b-a+1)種選擇,小q希望知道,所有這些選擇中,第k大的能力值是多少。例如:
船隻:5 3 7
裝備:4 2 1 8 16
對於l=1,r=3,a=1,b=5,k=10的詢問,將所有可能的能力值排序,分別為7*16=102,5*16=80,7*8=56,3*16=48,5*8=40,7*4=28,3*8=24,5*4=20,7*2=14,3*4=12,5*2=10,7*1=7,3*2=6,5*1=5,3*1=3,其中第10大的是12。對於l=2,r=3,a=2,b=4,k=5的詢問,將所有可能的能力值排序,分別為7*8=56,3*8=24,7*2=16,7*1=7,3*2=6,3*1=3,其中第5大的是6。假定小q改修了第二艘船使其能力值成功增加至4,並改修了第5件裝備但由於失敗使得它的能力值減小為9。現在,對於l=1,r=2,a=4,b=5,k=3的詢問,所有可能的能力值分別為5*9=45,5*8=40,4*9=36,
第一行兩個數n,m,空格分隔,表示小q的船的數量和裝備的數量。
第二行n個數,空格分隔,表示小q的船的能力值(按編號)。
第三行m個數,空格分隔,表示小q的裝備的能力值(按編號)。
第四行乙個數q,表示小q的運算元量。
接下來q行,每行描述乙個操作,操作要麼為乙個改修事件,要麼為乙個詢問。
對於改修事件,該行4個數0,type,pos,val,type為0或1,0表示把pos號船改修成val的能力值
1表示把pos號裝備改修成val的能力值。
對於詢問操作,該行6個數1,l,r,a,b,k,空格分隔,表示乙個詢問。
n<=250,m<=100000,q<=100000,其中詢問操作不會超過200。
對於100%的資料,1<=l<=r<=n,1<=a<=b<=m,1<=k<=(r-l+1)*(b-a+1)
任何時候船能力值為不超過2000的正整數,裝備能力值為不超過1000000的正整數。
對於每個詢問操作,輸出一行,包含乙個數,表示詢問的答案。
當初拿到這道題,也沒想到正解,就寫了個 mu
ltis
etm ul
tise
t交上去,結果又 ml
e mle
又 tl
e tle
。題外話講完,就來講講標算吧。
標準演算法是二分套二分,具體操作如下:o(1)o
(1
)解決,略過。
對於每個詢問操作:
這道題的兩個二分很鍛鍊眼力啊。每個二分完了之後的返回值要調好久的。
還有就是有些人二分計算 mi
d mid
寫成 mi
d=(l
+r)>>
1 mid
=(l+
r)
>>
1的人要開 lo
nglo
ngl on
glon
g不然會炸掉,要麼該寫成 mi
d=l+
((r−
l)>>1)
m id
=l+(
(r−l
)>>1)
。
#include
#include
#include
#include
#define maxn 255
#define maxm 100005
int boat[maxn], equip[maxm], table[maxm];
inline int solve(int boat, int limit, int len)
return len - l + 1;
}int main()
else
printf("%d\n", r - 1);}}
return
0;}
bzoj4717 改裝 模擬 二分
題目背景 小q最近喜歡上了一款遊戲,名為 艦隊connection 在遊戲中,小q指揮強大的艦隊南征北戰,從而成為了一名dalao。在遊戲中,不僅船隻能力很重要,搭配合適的裝備更是如虎添翼。小q潛心研究配裝三十年,終於 把裝備湊齊了。題意描述 小q有n艘船,m件裝備。為了簡單起見,我們假定每艘船都只...
BZOJ 3443 裝備合成
orz噶爺 就是那個叫wohenshuai的大佬 好勁啊 每次裝備合成新建乙個點 連向兩個子節點 可以知道每次詢問就詢問這個點的子樹 每次合併每個點就跳到它合併的點 代表以後要詢問這個子樹 改的話只要改最底層即可 上面的都會影響到 include using namespace std const ...
BZOJ4004 JLOI2015 裝備購買
臉哥最近在玩一款神奇的遊戲,這個遊戲裡有 n 件裝備,每件裝備有 m 個屬性,用向量zi aj am 表示 1 i n 1 j m 每個裝備需要花費 ci,現在臉哥想買一些裝備,但是臉哥很窮,所以總是盤算著 怎樣才能花盡量少的錢買盡量多的裝備。對於臉哥來說,如果一件裝備的屬效能用購買的其他裝備組合出...