排位賽三B Loan Repayment

2021-10-03 19:41:17 字數 1312 閱讀 7011

farmer john 欠了 bessie n 加侖牛奶(1<=n<=1e12)。他必須在 k 天內將牛奶給 bessie。但是,他不想將牛奶太早拿出手。另一方面,他不得不在還債上有所進展,所以他必須每天給 bessie 至少 m 加侖牛奶(1≤m≤1e12)。

以下是 farmer john 決定償還 bessie 的方式。

首先他選擇乙個正整數 x。

然後他每天都重複以下過程:

1.假設 farmer john 已經給了 bessie g 加侖,計算 (n-g)/x(向下取整)。令這個數為 y。

2.如果 y 小於 m,令 y 等於 m。

3.給 bessie y 加侖牛奶。

求x 的最大值,使得 farmer john 按照上述過程能夠在 k 天後給 bessie 至少 n 加侖牛奶 (1≤k≤1e12)。

輸入格式

輸入僅有一行,包含三個空格分隔的正整數 n,k,m,滿足 k×m範圍那麼大,乙個個找過去肯定超時只能二分x去判斷是否符合條件

關於是否符合條件的判定

直接暴力模擬肯定會超時的啦,我們可以手動來算一下,如果我們還的數量小於m, (n-g)/x 小於m, 那明天這個值只會更小,所以就變成了每天都還m瓶,否則就計算一下會有連續多少天的每日還債量是y,假設這種情況持續a天,那麼可以知道在a−1天之後的還債量=y,而a天之後的還債量#include

#include

#include

#include

#include

#include

using

namespace std;

long

long

int n, k, m;

//欠n k天還完 每天至少還m 決定每天還max((n-g)/x, m)瓶 g為已還 求x的最大值

long

long

int ans;

bool

judge

(long

long

int x)

//否則就是y>=m 的情況

long

long

int day =

min(tk,

(n-x*y-g)

/y+1);

tk -

= day;

g += day * y;

}return g>=n;

}int

main()

else r = mid -1;

} cout << ans << endl;

return0;

}

排位賽三E Word Processor

牛貝西正在為她的寫作課寫一篇 由於她的筆跡很差,她決定使用文字處理器鍵入 文章包含n個單詞,以空格分隔。每個單詞的長度在1到15個字元之間 含1和15個字元 並且僅由大寫或小寫字母組成。根據作業說明,必須採用非常特定的格式 每行最多只能包含k個字元,且不能計算空格。幸運的是,bessie的文字處理器...

排位賽題解

十進位制轉二進位制,右移 與 運算結合,遍歷每個數字在二進位制下點每一位。include intmain for int i 0 i 4 i for int i 0 i 4 i a i 1 右移除2 printf d d d d n num 0 num 1 num 2 num 3 return0 題...

排位賽一 E Milk Visits

farmer john 計畫建造 n 個農場,用 n 1 條道路連線,構成一棵樹 也就是說,所有農場之間都互相可以到達,並且沒有環 每個農場有一頭奶牛,品種為更賽牛或荷斯坦牛之一。farmer john 的 m 個朋友經常前來拜訪他。在朋友 i 拜訪之時,farmer john 會與他的朋友沿著從農...