二十分求解,数组范围开的够大了?谢谢帮忙

P1047 [NOIP2005 普及组] 校门外的树

希望更丰富的展现?使用[Markdown](https://www.luogu.org/wiki/show?name=%E5%B8%AE%E5%8A%A9%EF%BC%9Amarkdown)
by 氷芽川四糸乃 @ 2019-06-23 18:15:33


@[Long_Ping](/space/show?uid=53204) 嗯嗯,我改改试试
by 毛博辉 @ 2019-06-23 18:16:40


#include<cstdio> #include<algorithm> using namespace std; class area { public: int start; int end; }A[500]; bool cmp(area a,area b) { if(a.start!=b.start) {return a.start<b.start;} else {return a.end<b.end;} } int result(area a[],int L,int n); int result(area a[],int L,int n) { int sum=0,i=0; int start,end; start=a[0].start; end=a[0].end; for(i=0;i<n;i++) { if(i+1<n&&a[i].end>=a[i+1].start) { if(a[i+1].end>end) {end=a[i+1].end;} } else { sum+=(1+end-start); if(i+1<n) {start=a[i+1].start;end=a[i+1].end;} } } return L-sum; } int main() { int L,N; int n; while(scanf("%d%d",&L,&N)!=EOF) { n=N; while(n--) { scanf("%d%d",&A[n].start,&A[n].end); } sort(A,A+N,cmp); printf("%d\n",result(A,L+1,N)); } return 0; }
by 毛博辉 @ 2019-06-23 18:20:33


求大佬帮我看一下吧 我感觉思路是对的就是原来的数据排序后 Start End 100 200 150 300 470 471 然后看数据的前一个数据的End是否大于等于后一个的Start,可以的话就可以记录,然后不符合时计算,并更改start与end的值
by 毛博辉 @ 2019-06-23 18:25:26


@[毛博辉](/space/show?uid=195075) dalao的代码蒟蒻认不识……
by 灵光一闪 @ 2019-06-23 18:27:40


@[毛博辉](/space/show?uid=195075) 直接开一个bool数组,然后把所有的被砍掉的数的序号在bool里记成true 然后循环找false……
by 灵光一闪 @ 2019-06-23 18:29:19


@洛谷亿岁,额,大佬,帮我看下下,可能代码实现的比较麻烦,谢谢大佬
by 毛博辉 @ 2019-06-23 18:34:20


@[洛谷亿岁](/space/show?uid=122605) 嗯嗯,我试试
by 毛博辉 @ 2019-06-23 18:35:30


@[毛博辉](/space/show?uid=195075) AC代码: ```cpp #include<bits/stdc++.h> using namespace std; int a[10001]; int main() { long long n,sum=0,m,l,x,y; cin>>l>>m; for(int i=1;i<=m;i++) { cin>>x>>y; for(int j=x;j<=y;j++) { a[j]=1; } } for(int i=0;i<=l;i++) { if(a[i]==0) sum++; } cout<<sum; return 0; } ```
by 幻之陨梦 @ 2019-06-23 22:17:28


@[ZhanLang](/space/show?uid=123808) 嗯嗯,谢谢您,嘻嘻
by 毛博辉 @ 2019-06-23 23:13:33


|