牛客网【每日一题】3月25日 tokitsukaze and Soldier
牛客網【每日一題】3月25
題號:NC50439
名稱: tokitsukaze and Soldier
來源:練習賽50-C
鏈接: link.
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 524288K,其他語言1048576K
64bit IO Format: %lld
題目描述
在一個游戲中,tokitsukaze需要在n個士兵中選出一些士兵組成一個團去打副本。
第i個士兵的戰力為v[i],團的戰力是團內所有士兵的戰力之和。
但是這些士兵有特殊的要求:如果選了第i個士兵,這個士兵希望團的人數不超過s[i]。(如果不選第i個士兵,就沒有這個限制。)
tokitsukaze想知道,團的戰力最大為多少。
輸入描述:
第一行包含一個正整數n(1≤n≤10^5)。
接下來n行,每行包括2個正整數v,s(1≤v≤10^9,1≤s≤n)。
輸出描述:
輸出一個正整數,表示團的最大戰力。
示例1
輸入
輸出
3示例2
輸入
輸出
100思路
所求的最大戰斗力由v和s這兩個因素限制。
結構體數組a存放v和s,然后對其排序,先按照s從大到小,如果s相同再排v,也是從大到小(先要保證足夠的人數,后面好進行取舍)。
定義一個從小到大的優先隊列q,ans相互跟隨q,(q每次添加一個戰力值,同時用ans加上戰力值;ans刪去,q也彈出),戰力值的先后加入由s的排序決定,當q的元素數量大于當前s的值時(s是由大到小的排序的),就將多出的部分pop出(q是從小到大排序,所以彈出的總是其中最小值),再用ans減去,這樣ans的值即為在人數限定在s內的最佳情況(因為彈出的是最小值,相對于前s個數的和,所以之后也不用再考慮被彈出的數),記錄ans的最大值
我剛開始提交是70多分,想了一陣子才發現是數組開小了(笑哭)
總結
以上是生活随笔為你收集整理的牛客网【每日一题】3月25日 tokitsukaze and Soldier的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 域名没有空间怎么备案(域名没有空间怎么备
- 下一篇: 安卓窗口化软件(安卓窗口化)