在最小值,最大值的问题 或者没有办法确定答案时候, 可以使用二分答案法.
#include <cstdio>
#include <iostream>
#include <fstream>
using namespace std;
int main(){
fstream f("E:\\text.txt");
int n;
int gift[100];
bool used[100];
memset(used, 0, sizeof(used));
int ans = 0;
f >> n;
for (int i = 0; i < n; i++){
f >> gift[i];
}
ans = gift[0];
for (int i = 0; i < gift[0]; i++) used[i] = true;
for (int i = 1; i < n; i++){
int g = gift[i];
int j = 0;
while (1){
if (used[j]) used[j] = false;
else {
g--; used[j] = true;
if (g == 0) break;
}
if (j+1>ans) ans = j+1;
j++;
}
}
int last=0;
for (int i = gift[0]; i < ans; i++){
if (!used[i]) last++;
}
for (int i = 0; i < gift[0]; i++){
if (used[i]){
if (last>0)
last--;
else
ans++;
}
}
cout << ans;
}