• 2020牛客暑期多校训练营(第九场) F.Groundhog Looking Dowdy 尺取,双指针


    给定n条链,每条链中有若干个数字

    选出其中的m条,从每条中选出一个数,问能够得到的最小的最大差值。

    如果能选,每次都贪心的选择差最小的一对。那么不妨对原先的数都排一遍序放到容器里。然后相当于必须找到m个不同的才能选取。

    由于每次枚举L都是最多一个m发生变化。所以复杂度是没问题的。

    vector<pii> v;
    int vis[maxn];
    
    int main() {
        int n = readint();
        int m = readint();
        for (int i = 0; i < n; i++) {
            int k = readint();
            for (int j = 0; j < k; j++) {
                int x = readint();
                v.push_back(make_pair(x, i));
            }
        }
        sort(v.begin(), v.end());
        int res = INF;
        int cnt = 0;
        int l = 0, r = 0;
        //for (int i = 0; i < v.size(); i++) cout << v[i].first << " " << v[i].second << "
    ";
        while (l < v.size() - m && r < v.size()) {
            if (vis[v[r].se]) {
                r++;
                continue;
            }
            if (!vis[v[r].se] && cnt < m) cnt++, vis[v[r].se] = 1, r++;
            if (cnt == m) {
                //cout << l << " " << r << "
    ";
                res = min(res, v[r - 1].fi - v[l].fi);
                if (v[l + 1].se != v[l].se) cnt--, vis[v[l].se] = 0;
                l++;
            }
        }
        printf("%d", res);
    }
  • 相关阅读:
    团队冲刺第一天
    第八周进度报告
    团队会议01
    《梦断代码》阅读笔记(三)
    《梦断代码》阅读笔记(二)
    《梦断代码》阅读笔记(一)
    SCRUM第六天
    SCRUM第五天
    大白话strom——问题收集(持续更新ing)
    maven环境快速搭建(转)
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13459125.html
Copyright © 2020-2023  润新知