你參加了某檔電視衝關節目,並走到了最後一關:共有 n件物品給你挑選,且對物品 i,其** value[i]滿足關係: i∀i∈[1,n],value[i]∈[1,n],且∀i∈[1,n],∀j∈[1,n],i!=j 有 value[i] != value[j]。給你 k 次將這些物品砍價的機會,每次砍價可以選擇任意 pp 件物品)(p≤n),將它們同時砍掉 c 元,但物品在被砍價後其**不能為負數。若你在使用 q(q≤k) 次機會後,所有物品的**都被減為 0元,則你可以將所有物品帶走。請問你能把這些物品帶走嗎?因為情況非常緊急,你只有 2000ms2000ms 的機會思考,若能則輸出"yes",若不能輸出則"no"(雙引號不需輸出)。
輸入格式
單組輸入,每組輸入的第一行包含兩個數 n,k(k(n∈[1,200,000],k∈[1,10,000]),分別為 n 件物品,k 次砍價機會。第二行為 n 個數,為 n 件物品分別的**。
輸出格式
如題意進行輸出你是否能將所有物品帶走。
輸出時每行末尾的多餘空格,不影響答案正確性
樣例輸入
2 1樣例輸出
no樣例解釋
對(2,1)你只有一次砍價機會,若你選擇砍 1 元,則物品**可能砍為(2,0)或(1,1)或(1,0),不滿足帶走的條件;若你選擇砍 2 元,則物品**則變為(0,1),也不滿足帶走的條件。你無法選擇砍 2元以上,因為砍價後物品**一定會變為負數。
故你無法在一次砍價內將所有物品砍為 0 元,輸出 "no"
思路: 因為i∀i∈[1,n],value[i]∈[1,n],並且不允許重複,所以當n為3時,a[i]只能是1 2 3,只是順序不同而已。
首先我們先找出1~n的中位數mid,讓1~n中能減mid的減去mid,其中1~n的最大值就變成了n/2,一直向下直到n變為0.
其實就是每次將大於中位數的都減去中位數。
ac**:
#include #include #include #include #include #include #include #include #include #include #include #include #include #define eps 0.0000000001
#define inf 0x3f3f3f3f
const int m=1e4+10;
using namespace std;
typedef long long ll;
int main()
if(ans>k)
cout<<"no"
cout<<"yes"
}
F csgo(計蒜客 聯盟周賽)
題目描述 著名第一人稱射擊遊戲 csgo 因其優秀的平衡性,爽快的射擊感和科學的戰術配比贏得了世界廣大玩家的好評。在一局遊戲中,分為兩個陣營,他們的目標就是消滅全部的對方敵人。現在你是其中的一名玩家,不幸的是,你突然遭遇了許多個站成一橫排,身高不同的敵人。這種時候,用 瞄準對方的頭部進行 爆頭 一擊...
計蒜客 2019計蒜之道D
題意 現在給定你乙個字串 s ss 以及乙個整數 k kk,請求出 s ss的字典序最小的長度為 k kk的子串行。資料範圍 0 s 5000000 00 s 5000 000 樣例輸入 helloworld 5樣例輸出 ellld思路 假如我們先不考慮長度為k的限制我們應當怎麼做?我們以樣例為例子...
計蒜客初賽3練習賽
計蒜客初賽5之前選了初賽3的題強行練手,確實這道題對思維的要求不低,要求轉換思路,價值挺大。初賽5成功晉級後,將未完成的 補完,完結此次初賽之旅。思路 這題明顯是個模擬題,模擬兩個小車的位置。不過,一開始準備寫個程式專門判斷小車位置,考慮到小車方向,時間,並單獨處理碰撞和碰牆情況,由於還看存在半點碰...