我們首先將所有電池排序,那麼我們可以找到一組最優方案,使得一台機器的能量之差是相鄰兩電池的能量之差。
然後我們就二分這個答案,從前往後貪心地選這個數對,然後看是否所有的數對都是滿足條件的。
假設這個數對是 i - 1, i,並且是第 j 個數對,那麼我們稱滿足條件為:
2nk - i + 2 >= 2k(n - j + 1)
意思就是能拿出足夠多的電池來組成機械人。
然後注意特判:如果不能選出足夠多的數對就返回 false,我在這裡 wa 到死。。。
畢竟 gromah 太弱,只會做水題。
1 #include 2 #include 3 #include 4 #include 5 #include 6using
namespace
std;
7#define n 1000000 + 589
intn, k, size, max, a[n];
1011 inline int
getint()
1220
21 inline bool judge(int
m)22
30return !cnt;31}
3233
intmain()
3447 sort(a + 1, a + size + 1
);48
int l = a[2] - a[1], r =max;
49while (l 5055 printf("
%d\n
", l);
5657
#ifndef online_judge
58fclose(stdin);
59fclose(stdout);
60#endif
61return0;
62 }
每日一題力扣396
給定乙個長度為 n 的整數陣列 a 假設 bk 是陣列 a 順時針旋轉 k 個位置後的陣列,我們定義 a 的 旋轉函式 f 為 f k 0 bk 0 1 bk 1 n 1 bk n 1 計算f 0 f 1 f n 1 中的最大值。方案一 找規律找出來的,class solution def maxr...
396 旋轉函式 dp 數學找規律
難度中等95 假設bk是陣列a順時針旋轉 k 個位置後的陣列,我們定義a的 旋轉函式 f為 f k 0 bk 0 1 bk 1 n 1 bk n 1 計算f 0 f 1 f n 1 中的最大值。注意 可以認為n 的值小於 105。示例 a 4,3,2,6 f 0 0 4 1 3 2 2 3 6 0 ...
CodeForces 396A 數論 組合數學
好久沒做數論的東西了,乙個獲取素數的預處理跟素因子分解寫錯了,哭瞎了,呵呵,首先ai最大值為10 9,n為500,最壞的情況 m最大值為500個10 9相乘,肯定不能獲取m了,首選每乙個ai肯定是m的乙個因子,然後能分解就把ai給分解素因子,這樣全部的ai都分解了 就能得到m的 所有素因子 以及 所...