訓練部隊 全國模擬(三)

2022-08-24 01:45:08 字數 1517 閱讀 8252

[程式設計題] 訓練部隊

時間限制:1秒

空間限制:32768k

小牛牛是牛牛王國的將軍,為了訓練出精銳的部隊,他會對新兵進行訓練。部隊進入了n個新兵,每個新兵有乙個戰鬥力值和潛力值,當兩個新兵進行決鬥時,總是戰鬥力值高的獲勝。獲勝的新兵的戰鬥力值就會變成對手的潛力值 + 自己的戰鬥力值 - 對手的戰鬥力值。敗者將會被淘汰。若兩者戰鬥力值一樣,則會同歸於盡,雙雙被淘汰(除了考察的那個新兵之外,其他新兵之間不會發生戰鬥) 。小牛牛想知道通過互相決鬥之後新兵中戰鬥力值+潛力值最高的乙個可能達到多少,你能幫助小牛牛將軍求出來嗎? 

輸入描述:

輸入包括n+1行,第一行包括乙個整數n(1 ≤ n ≤ 10^5); 接下來的n行,每行兩個整數x和y(1 ≤ x,y ≤ 10^9)

輸出描述:

輸出乙個整數,表示新兵中戰鬥力值+潛力值最高的乙個能達到多少。

輸入例子:

2 1 2 2 1

輸出例子:

4解題思路:

可以考慮把新兵分為兩種型別。

一種戰鬥型(戰鬥值大於潛力值的),一種潛力型(相當於打了他可以獲得潛力值),對潛力型的新兵進行戰鬥力值排序。

然後一種情況是潛力型中戰鬥值最高的牛牛去打完剩餘的潛力型,因為戰鬥力值會越大越多,另一種情況考慮打完所有潛力型獲得值是固定的,那麼在攻擊型中找乙個能打完所有的潛力型的牛牛,並且戰鬥力值和潛力值要最大。

實現就是用的字首和和二分

1 #include 2

3using

namespace

std;

45 typedef long

long

ll;6

const

int maxn = 100005;7

intn;

8int

goodn,badn;

9ll sum[maxn],max[maxn];

10struct

node

13 node (const ll &_x,const ll &_y)

14bool

operator

< (const node &t) const

18}good[maxn],bad[maxn];

19int search(int l, int

r, ll x)

25return

l;26}27

ll solve()

34return

ans;35}

36int

main()

44 sort(good + 1, good + goodn + 1

);45 max[0] = 0; sum[0] = 0;46

for(int i = 1; i <= goodn; i++)

50 ll ans =solve();

51 printf("

%lld\n

", ans);

52return0;

53 }

引自:

排序子串行 全國模擬(三)

牛牛定義排序子串行為乙個陣列中一段連續的子串行,並且這段子序列是非遞增或者非遞減排序的。牛牛有乙個長度為n的整數陣列a,他現在有乙個任務是把陣列a分為若干段排序子串行,牛牛想知道他最少可以把這個陣列分為幾段排序子串行.如樣例所示,牛牛可以把陣列a劃分為 1,2,3 和 2,2,1 兩個排序子串行,至...

好多魚 全國模擬(一)

程式設計題 好多魚!時間限制 1秒 空間限制 32768k 牛牛有乙個魚缸。魚缸裡面已經有n條魚,每條魚的大小為fishsize i 1 i n,均為正整數 牛牛現在想把新捕捉的魚放入魚缸。魚缸內存在著大魚吃小魚的定律。經過觀察,牛牛發現一條魚a的大小為另外一條魚b大小的2倍到10倍 包括2倍大小和...

CSP S全國模擬賽第三場 nan死了

居然第一步膜化乘除 都沒看出來,沒救了.大概是貢獻字首和優化的做法 巨兔式講解 大家都學會了麼?咱發現有大量的 i j i j 同時 對很多 c 產生了貢獻,咱可以去優化這一部分的轉移,具體做法就是根據前面能加的後面也能加,然後一路累加且算貢獻 對於小於根號的所有 i j 咱可以優化這一部分轉移,然...