#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
貌似差的更远了。
所以,谁能帮我看看问题出在哪里!(提示:尽量别用离散化,因为我看不懂)