30pts求助
  • 板块P1496 火烧赤壁
  • 楼主BH5970
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/10/2 12:26
  • 上次更新2024/10/2 16:09:57
查看原帖
30pts求助
1234287
BH5970楼主2024/10/2 12:26
#include<bits/stdc++.h>
using namespace std;
struct line{
	int start;
	int finish;
};
line a[20005];
bool cmp (line x,line y) {
	return x.start < y.start;
}
int main () {
	int n;
	cin >> n;
	int cnt = 0;
	int start;
	int finish = 0;
	for (int i = 1; i <= n; i++) {
		cin >> a[i].start >> a[i].finish;
		finish = max(finish,a[i].finish);
	}
	sort (a+1,a+n+1,cmp);
	int x = 1;
	start = a[x].start;
	for (int i = start; i < finish; i++) {
		if (i >= a[x].start && i <= a[x].finish) {
			cnt++;
		}
		if (i >= a[x].finish) {
			x++;
			if (a[x].start > i) {
				i = a[x].start;
			}
			if (a[x].start < i) {
				a[x].start = i;
			}
		}
	}
	cout << cnt << endl;
    return 0;
}

#2#4#10AC,#8TLE,剩下全WA。

下载数据#1,正确答案:19887 本代码答案:19320

改完代码以后:

#include<bits/stdc++.h>
using namespace std;
struct line{
	int start;
	int finish;
};
line a[20005];
bool cmp (line x,line y) {
	return x.start < y.start;
}
int main () {
	int n;
	cin >> n;
	int cnt = 0;
	for (int i = 1; i <= n; i++) {
		cin >> a[i].start >> a[i].finish;
	}
	sort (a+1,a+n+1,cmp);
	for (int i = 1; i <= n; i++) {
		cnt += a[i].finish - a[i].start;
		if (a[i+1].start > a[i].finish) {
			continue;
		}
		if (a[i+1].start < a[i].finish) {
			a[i+1].start = a[i].finish;
		}
		if (a[i+1].finish < a[i].finish) {
			i++;
		}
	}
	cout << cnt << endl;
    return 0;
}

#2#4#10AC,剩下全WA,少了个TLE。

运行#1,正确答案:19887 本代码答案:59153830

貌似差的更远了。

所以,谁能帮我看看问题出在哪里!(提示:尽量别用离散化,因为我看不懂

2024/10/2 12:26
加载中...