小Ho的防護盾 hihoCoder

2021-08-21 14:13:40 字數 1617 閱讀 6227

時間限制:10000ms

單點時限:1000ms

記憶體限制:256mb

小ho的虛擬城市正在遭受小hi的攻擊,小hi用來攻擊小ho城市的**是一艘殲星艦,這艘殲星艦會以t(t為大於0的整數)個單位時間的間隔向小ho的城市轟擊。殲星艦總共有n枚炮彈,其中第i枚會造成ai點傷害值。

幸好小ho的城市有k層護盾,每層護盾可以抵擋m點傷害。當某次轟擊使得傷害值達或超過m時,該層護盾就會被擊碎;該次轟擊溢位的傷害不會作用於下一層護盾;下一次轟擊將由下一層護盾承受。

同時,受損但尚未被擊碎護盾會以每單位時間減少1點傷害值的速度修復自己,直到傷害值降為0。這就意味著小hi的攻擊間隔t越大,小ho撐過這n枚炮彈的可能性就越大。

那麼問題來了,小hi的攻擊間隔t至少需要是多少,小ho城市的防護護盾才能不被全部擊破?

為了使題目不存在歧義,規定:

小hi的第i次攻擊發生在時刻(i-1)*t

小ho的第i次修**生在時刻i-0.5

第一行包含3個整數n、m和k,意義如前文所述。

第二行包含n個整數a1 - an,表示小hi第i枚炮彈的傷害值。

對於30%的資料,滿足n<=100

對於100%的資料,滿足1<=n<=100000

對於100%的資料,滿足1<=k<=10, 1<=ai, m<=100000

輸出使得小ho城市的防護護盾不被全部擊破的小hi攻擊間隔的最小值。如果不存在這樣的t,則輸出-1。

樣例輸入

3 5 1

3 3 3

樣例輸出

3
題目分析:

分析題意,顯然攻擊間隔 t 越小,小ho撐過 n 次攻擊的可能性越小,如果 t 是確定的,那麼整個攻擊過程就確定了,小hi能不能破壞城市也就確定了,所以我們可以用乙個 bool 型別的陣列 test[i] 來表示 t = i 時,小hi是否可以破壞城市(true代表可以,否則反之)。那麼在 test 陣列中,false值一定會出現在true值(可以將test陣列變相地看作是有序的),所以問題就傳化為求最早出現的false值的下標(即 t)。有序陣列 + 求最小的符合條件的值的下標 → 考慮lower_bound 的用法。

但是我們在**中,不必先建立好陣列,可以使用到哪乙個值時再計算這個值是否符合條件,就類似於二分查詢跟雜湊查詢的區別一樣,可以節省部分時間。

#include #include #define maxn 100005

using namespace std;

int n,m,k;

int a[maxn];

bool test(int t)

else

if(cnt >= k) return true;

}return false;

}int main()

if(cnt >= k)

int l = 1,r = m; //如果上面的特判不成立,那麼test(m)一定是false,所以我們可以初始化r和ans為m,

int ans = m;

while(l <= r)

else

}cout << ans << endl;

return 0;

}

題目鏈結

強大的安全防護盾

iptables命令是linux上常用的防火牆軟體,是netfilter專案的一部分。可以直接配置,也可以通過許多前端和圖形介面配置。通過iptables搭建的防火牆規則可以實現 防攻擊資料報 等等.4張表 注 表的處理優先順序 raw mangle nat filter 5條鏈 iptables規...

遊戲盾防護的接入方式

遊戲盾sdk防護功能 遊戲盾sdk是針對遊戲行業面對的ddos cc攻擊推出的針對性的網路安全解決方案,相比高防ip,除了能針對大型ddos攻擊 t級別 進行有效防禦外,還具備徹底解決遊戲行業特有的tcp協議的cc攻擊問題能力,防護成本更低,效果更好!遊戲盾在風險治理方式 演算法技術上全面革新,幫助...

小Hi和小Ho的禮物

某人有n袋金幣,其中第i袋內金幣的數量是ai。現在他決定選出2袋金幣送給小hi,再選2袋金幣送給小ho,同時使得小hi和小ho得到的金幣總數相等。他想知道一共有多少種不同的選擇方法。具體來說,有多少種下標四元組 i,j,p,q 滿足i,j,p,q兩兩不同,並且i j,p q,ai aj ap aq。...