社区讨论
刚刚月赛的2B
学术版参与者 2已保存回复 3
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 3 条
- 当前快照
- 1 份
- 快照标识符
- @lo7z3grm
- 此快照首次捕获于
- 2023/10/27 10:07 2 年前
- 此快照最后确认于
- 2023/10/27 10:07 2 年前
请问是贪心吗?
如果是有没有大佬能帮我看看我的代码哪里错了,只有20
CPP#include <bits/stdc++.h>
using namespace std;
struct node
{
int l, r, len;
}a[300005];
int n, ansl, ansr, k = 1;
bool cmp(node x, node y)
{
if (x.len == y.len)
{
return x.l < y.l;
}
return x.len > y.len;
}
int main()
{
cin >> n;
for (int i = 1 ; i <= n ; i ++)
{
cin >> a[i].l >> a[i].r;
a[i].len = a[i].r - a[i].l;
}
sort(a + 1, a + 1 + n, cmp);
ansl = a[1].l;
ansr = a[1].r;
for (int i = 2 ; i <= n ; i ++)
{
if (ansl <= a[i].l && ansr >= a[i].r)
{
ansl = a[i].l;
ansr = a[i].r;
}
else if (ansl < a[i].l && ansr >= a[i].l)
{
if (a[i].l - ansl > ansr - a[i].l + 1)
{
ansr = a[i].l - 1;
}
else
{
ansl = a[i].l;
}
}
else if (ansl <= a[i].r && ansr > a[i].r)
{
if (a[i].r - ansl + 1 > ansr - a[i].r)
{
ansr = a[i].r;
}
else
{
ansl = a[i].r + 1;
}
}
if (ansl >= a[i].l && ansr <= a[i].r)
{
k ++;
}
}
cout << (ansr - ansl) * k;
return 0;
}
回复
共 3 条回复,欢迎继续交流。
正在加载回复...