社区讨论

刚刚月赛的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 条回复,欢迎继续交流。

正在加载回复...