題解 BZOJ 4717 裝備

2021-08-20 22:39:13 字數 2339 閱讀 1428

傳送門

由於這道題是許可權題,所以題面我也放在這裡了(我不是許可權狗)。

【題目背景】

小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,現在臉哥想買一些裝備,但是臉哥很窮,所以總是盤算著 怎樣才能花盡量少的錢買盡量多的裝備。對於臉哥來說,如果一件裝備的屬效能用購買的其他裝備組合出...