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;
}
小结
痛。。。。。比赛想了假做法,三个人,三份代码,三个小时。
菜是原罪。