import lombok.Data;
import java.util.*;
public class maintest {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int maxUsers = 0;
int R = input.nextInt();
int[] num = new int[R+1];
int user = 0;
int flag = 0;
int flagX = 1;
int trueMax = 0;
for (int i = 0; i <= R; i++){
num[i] = input.nextInt();
}
user = input.nextInt();
for (int i = R; i>=0; i--){
if (Math.pow(2,i) > user){
maxUsers += num[i];
num[i] = 0;
flag = i;
}else {
break;
}
}
onePace onePace = new onePace();
onePace.setFlag(flag);
onePace.setMaxUsers(maxUsers);
onePace.setNum(num);
onePace.setFlag(flag);
while (flagX == 1){
int oneUser = 0;
onePace.setOneUser(oneUser);
int add = add(onePace);
if (add > trueMax){
trueMax = add;
}
int max = 0;
for (int i = 0; i < flag; i++){
if (num[i] != 0){
max += num[i]*Math.pow(2,i);
}
}
if (max > user){
flagX = 1;
}else {
flagX = 0;
}
}
System.out.println(trueMax);
}
public static int add(onePace onePace){
for (int i = onePace.flag - 1; i > 0; i--){
if (onePace.num[i] != 0){
if (onePace.oneUser + Math.pow(2,i) <= onePace.oneUser){
onePace.num[i]--;
onePace.oneUser += Math.pow(2,i);
if (onePace.oneUser == onePace.user){
return addnum(onePace.maxUsers);
}else {
add(onePace);
}
}else {
if (judgeBefore(onePace.num,i) == 0){
onePace.num[i]--;
return addnum(onePace.maxUsers);
}else {
add(onePace);
}
}
}
}
return onePace.maxUsers;
}
public static int judgeBefore(int[] num, int flag){
for (int i = flag-1; i >= 0; i--){
if (num[i] != 0){
return i;
}
}
return 0;
}
public static int addnum(int maxUsers){
return maxUsers+1;
}
@Data
public static class onePace{
int[] num;
int oneUser;
int maxUsers;
int flag;
int user;
}
}
第三题1111
于 2022-01-22 21:38:32 首次发布