题解:P14917 [GESP202512 五级] 数字移动
lcfollower · · 题解
相较于第二题就水多了。
考虑到如果对于一个
因此若
于是想到二分答案
然后你动了若干次不超过
因此剩下大于
比如
然而当
然后就做完了,时间复杂度为
哎真的没了嘛?不你还要特判
:::success[实现]
namespace lolcrying {
inline bool check(int x){
int cnt = 0 ;
up(i ,1 ,n) if(a[i] > x) b[++ cnt] = a[i]; //记录剩余的数。
up(i ,1 ,cnt) if(b[i] != b[i + 1] && b[i] != b[i - 1]) return 0; // 判断是否合法,如果不存在相邻的数与当前数相同肯定当前的 x 不合法。
return 1; // 都满足则合法。
} signed main(){
n = read();
up(i ,1 ,n) a[i] = read();
int l = 1 ,r = 1e5 ,ans = 0;
if(check(0)){ // 特判 ans = 0。
puts("0") ; return 0;
}
while(l <= r) {
int mid = ((l + r) >> 1);
if(check(mid)) r = mid - 1 ,ans = mid;
else l = mid + 1;
} writeln(ans);
return 0 ;
}
}
:::