题解 CF1550C. Manhattan Subarrays (思维)

来源:Educational Codeforces Round 111 (Rated for Div. 2)

不难但很好的思维题

d(p,q)p,q 两点之间的曼哈顿距离

给定三个点,如果 d(p,r)=d(p,q)+d(q,r) 则三个点是 坏三元组

在给定的序列中每个点都是 (bi,i) 请判断序列中有多少个好子序列,长度为 12 也为好序列

i<j<k 的情况下, d(p,r)=d(p,q)+d(q,r) 可以直接转化为:|bibk|=|bibj|+|bjbk|

正如 i<j<k 一样,如果 bibjbk 或者 bibjbk 时肯定是坏序列了

所以我们可以直接遍历判断情况

代码
int main() {
    cin.tie(nullptr)->sync_with_stdio(false);
    int _; for (cin >> _; _--;) {
        int n;
        cin >> n;
        vectora(n);
        auto check = [&](int L, int R) {
            for (int i = L; i <= R; ++i)for (int j = i + 1; j <= R; ++j)
                    for (int k = j + 1; k <= R; ++k) {
                        if (a[i] <= a[j] and a[j] <= a[k]) return 0;
                        if (a[i] >= a[j] and a[j] >= a[k]) return 0;
                    }
            return 1;
        };
        int ans = 0;
        for (int &x : a) cin >> x;
        for (int i = 0; i < n; ++i)
            for (int j = i; j < n; ++j)
                if (check(i, j)) ans += 1;
                else break;
        cout << ans << "\n";
    }
}

posted @   RioTian  阅读(62)  评论(0编辑  收藏  举报
编辑推荐:
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· Obsidian + DeepSeek:免费 AI 助力你的知识管理,让你的笔记飞起来!
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 全程不用写代码,我用AI程序员写了一个飞机大战
历史上的今天:
2020-07-30 (转)Github+jsDelivr+PicGo 打造稳定快速、高效免费图床
2020-07-30 解决Github中使用Octotree时,出现 Error: API limit exceeded 报错 或者 Error: Connection error报错的问题(详细操作)
2020-07-30 P3372 【模板】线段树 1
2020-07-30 【题解】Qin Shi Huang's National Road System HDU - 4081 ⭐⭐⭐⭐ 【次小生成树】
点击右上角即可分享
微信分享提示