BZOJ 3703 昊昊的壯舉之造福社會

2022-05-19 09:17:56 字數 981 閱讀 7865

傳送門

搜尋,剪枝

首先可以二分答案迭代加深,假設要買 $p$ 臺

那麼肯定賣**最小的 $p$ 臺

再來個 $a*$ ,設搜到當前情況時,有 $waste$ 的錢一定要被浪費(其實就是某些學校剩下的錢連最便宜的都買不起)

設最便宜的 $p$ 臺電腦總價值為 $sum$ ,所有學校的總錢數為 $s$,那麼我們最多浪費 $s-tot$,如果 $waste>s-tot$ 就直接返回

但是顯然還是不夠

看看資料發現相同**的電腦和相同初始錢數的學校數量很多

不妨使搜尋時保證,對於相同**的電腦,購買的學校的初始錢數單調不增,顯然這樣不會影響搜尋時的正確性

然後就可以跑過了

#include#include

#include

#include

#include

using

namespace

std;

typedef

long

long

ll;inline

intread()

while(ch>='

0'&&ch<='

9')

return x*f;

}const

int n=5e5+7

;int

n,m,mon[n],cst[n],ans;

ints,sum[n],mx,las[n];

bool

gg;void dfs(int pos,int

waste)

int r=las[cst[pos]];

for(int i=r;i;i--)

las[cst[pos]]=r;

}bool check(int

p)int

main()

printf(

"%d\n

",ans);

return0;

}

370 區間加法

題目描述 假設你有乙個長度為 n 的陣列,初始情況下所有的數字均為 0,你將會被給出 k 個更新的操作。其中,每個操作會被表示為乙個三元組 startindex,endindex,inc 你需要將子陣列 a startindex endindex 包括 startindex 和 endindex 增...

LeetCode Python 370 區間加法

假設你有乙個長度為n的陣列,初始情況下所有的數字均為0,你將會被給出k 個更新的操作。其中,每個操作會被表示為乙個三元組 startindex,endindex,inc 你需要將子陣列a startindex endindex 包括 startindex 和 endindex 增加inc。請你返回k...

Azkaban3 70安裝過程記錄

1.安裝前的環境 centos7,jdk1.8 2.配置azkaban前需要先安裝如下工具 git gcc,g 1 git 安裝 參考 2 gcc,g 安裝 yum install gcc gcc c 4.解壓 tar zxvf azkaban 3.70.0.tar.gz 5.解壓後 cd azka...