CF222A 题解
刷 *1200 偶然刷到的一题,虽然是 *1200,但是感觉不那么显然,题目链接。
考虑操作一次这个序列会发生什么变化,显然,对于 \([k,n]\) 这个整体来说,无论操作多少次,里面元素只是相对位置变化了而已,所以说只要 \([k,n]\) 中有不同的元素,那么就一定无解。
反之,如果 \([k,n]\) 里的元素全部相同,那么在最多删 \(k\) 次以后,所有元素都会变的相同,也就是一定有解。但是,如果存在一个 \(x\),使得 \([x,k]\) 这段区间内也都相同,那么显然我们只需要删到 \(x\),也就是操作 \(x\) 次,就能使得序列全部相同了。
const int MAXN = 1e5 + 5;
int a[MAXN], n, k;
signed main(void) {
cin >> n >> k;
for (int i = 1; i <= n; ++i) cin >> a[i];
int las = a[k], ans = 0;
for (int i = k; i <= n; ++i) {
if (a[i] != las) {
cout << -1 << endl;
return 0;
}
}
for (int i = 1; i <= n; ++i) {
if (a[i] != las) ans = i;
}
cout << ans << endl;
return 0;
}

浙公网安备 33010602011771号