【ACM-ICPC】Nowcoder Summer Training Camp 6 TI Intervals on the Ring

题意

n, m表示n个数1-n,1-n形成一个环,m个整区间(只包含整数),m个区间无交集。
对于每个区间[l, r]。
当 l <= r 时表示正常区间集合{l, l + 1, ……, r}。
当 l > r 时表示区间集合{l, l + 1, ……, n, 1, ……, r}。
我们可以任意构造区间,我们需要构造一组区间,使他们的交集等于题目给出的m个区间的并集。

解法分析

考虑给定的m个区间中间的空隙区间,我们需要排除他们,如何排除?
构造只有这个空隙没被覆盖的区间。相当于本来一个环全覆盖,现在在空隙处挖掉一块使得在交集中排除他。

代码

#include <bits/stdc++.h>
using namespace std;
struct node 
{
    int l, r;
}a[2333], b[2333];
int tot;
bool cmp(struct node a, struct node b)
{
    return a.l < b.l;
}
int main()
{
    int T;
    cin>>T;
    while (T--)
    {
        int n, m;
        cin>>n>>m;
        for (int i = 1; i <= m; ++i)
            cin >> a[i].l >> a[i].r;
        sort(a + 1, a + m + 1, cmp);
        cout << m << endl;
        for (int i = 1; i < m; ++i)
            cout << a[i + 1].l << ' ' << a[i].r << endl;
        cout << a[1].l << ' ' << a[m].r << endl;

    }
    return 0;
}

小结

痛。。。。。比赛想了假做法,三个人,三份代码,三个小时。
菜是原罪。

posted @ 2021-08-03 19:46  cacu  阅读(22)  评论(0编辑  收藏  举报