[程式設計題] 訓練部隊
時間限制: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 23using
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 咱可以優化這一部分轉移,然...