【2018級互測】志願填報
阿新 • • 發佈:2020-07-24
Description
眾所周知,今天是高考的第二天,正所謂“月兒彎彎照九州,幾家歡喜幾家愁”。而高考志願填報更是抉擇的時候,其中每年的高考的志願填報都是使用的 1、2、4、8 來表示數字,如要填塗 7 則選擇 1、2、4 三個數字, Pray2018 作為 1‰的數學愛好者,他決定研究這一問題, 即, 給出 n 個互不相同的正整數, 記為 s[i] , 每個正整數只能使用一次,求這 n 個數 不能組合得到的最小值。
Input
第一行是一個正整數 n,表示正整數的個數。
接下來的 n 行每行一個正整數。
Output
一個正整數,表示這 n 個數 不能組合得到的最小值。
Sample Input
4
1
2
4
8
Sample Output
16
Hint
【資料規模 與約定】
對於 30%的資料,n<=500,s[i]<=1000;
對於 70%的資料,n<=1000,s[i]<=10000;
對於 100%的資料,n<=100000,s[i]<=100000。
思路
- 找規律,發現:
設n個數為A1,A2,A3......An
滿足:A2<=A1+1,A3<=A1+A2+1,A4<=A1+A2+A3+1......
則:所有小於等於An的數都可以被湊出
程式碼
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int n,a[100005]; long long ans; int main() { scanf("%d",&n); for(int i=1;i<=n;++i) scanf("%d",&a[i]); sort(a+1,a+n+1); for(int i=1;i<=n;++i) { if(a[i]<=ans+1) ans+=a[i]; else break; } printf("%d\n",ans+1); return 0; }