zoukankan      html  css  js  c++  java
  • Educational Codeforces Round 89 (Rated for Div. 2) B. Shuffle(数学/双指针)

    题目链接:https://codeforces.com/contest/1366/problem/B

    题意

    大小为 $n$ 的数组 $a$,除了 $a_x = 1$,其余 $a_i = 0$,依次给出 $m$ 个区间,可以选择区间中的两个元素交换(可相同),问最多有多少个元素可能为 $1$ 。

    题解

    如果一个区间包含 $x$,那么可能为 $1$ 的元素范围即扩大至了整个区间,对于接下来的区间,判断是否与当前可能为 $1$ 的区间相交即可,相交则继续扩大区间范围,如此重复。

    判断两个区间是否相交: max(l, al) <= min(r, ar) 

    判断两个区间是否不相交: r < al or l > ar 

    代码一

    #include <bits/stdc++.h>
    using namespace std;
    
    void solve() {
        int n, x, m; cin >> n >> x >> m;
        int al = x, ar = x;
        for (int i = 0; i < m; i++) {
            int l, r; cin >> l >> r;
            if (max(l, al) <= min(r, ar)) {
                al = min(al, l);
                ar = max(ar, r);
            }
        }
        cout << ar - al + 1 << "
    ";
    }
    
    int main() {
        int t; cin >> t;
        while (t--) solve();
    }

    代码二

    #include <bits/stdc++.h>
    using namespace std;
    
    void solve() {
        int n, x, m; cin >> n >> x >> m;
        int al = x, ar = x;
        for (int i = 0; i < m; i++) {
            int l, r; cin >> l >> r;
            if (r < al or l > ar) continue;
            al = min(al, l);
            ar = max(ar, r);
        }
        cout << ar - al + 1 << "
    ";
    }
    
    int main() {
        int t; cin >> t;
        while (t--) solve();
    }
  • 相关阅读:
    异步编程(二)----------------多线程
    异步编程(一)
    爬虫笔记(四)--基于bs4
    统计某学校考研录取信息
    爬虫笔记(三)爬取‘糗事百科’热图板块所有图
    Day1登录接口编写
    元祖
    列表
    常用函数
    字符串
  • 原文地址:https://www.cnblogs.com/Kanoon/p/13098137.html
Copyright © 2011-2022 走看看