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;
}
posted @   小蛐蛐awa  阅读(7)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示