给出3个元素N1,N2,N3
现在我们可以对这些元素进行操作。
操作如下:
在单个操作中,我们将选择一个特定元素并将元素的值减少一半(即,如果元素的初始值是x,那么在递减之后它将是x / 2,其中除法是整数除法,例如3 / 2 = 1和4/2 = 2)。同时,其他两个元素的值将增加一个。
现在我们需要最小化最大元素,如果我们可以在ATMOST M秒执行此操作,并且每秒我们可以执行此操作一次。
示例:设N1 = 1,N2 = 2,N3 = 3,M = 1然后这里的答案是3
说明:我们可以选择第3个元素并使其成为一半。请注意,第一个和第二个元素将增加1个单位。所以价值变成2,3,1。这些值的最大值为3.因此答案为3.
我的方法:每次拿起最大的元素,它减少一半,然后将其他两个增加+1。
代码:
long long ans=max(N1,max(N2,N3));
for(int i=0;i<m;i++){
if(N1>=N2 && N1>=N3){
N1/=2;
N2++;
N3++;
}
else if(N2>=N1 && N2>=N3){
N2/=2;
N1++;
N3++;
}
else{
N1++;
N2++;
N3/=2;
}
ans=min(ans,max(N1,max(N2,N3)));
}
失败: 但是让N1 = 8,N2 = 8,N3 = 4,M = 3然后答案是5,这种方法出错了,因为根据提到的算法步骤可能是:
8 8 4 -> 4 9 5 -> 5 4 6 -> 6 5 3
但正确的是:
8 8 4 -> 9 9 2 -> 4 10 3 -> 5 5 4
约束: M介于1和100之间。 N1,N2和N3可以达到10 ^ 9。