#include<stdio.h>
int main(void){
int a,c,n,b,s;
unsigned int i,j,d,length[10000001];
while(scanf("%d",&n)!=EOF){
for(i=0;i<=10000000;i++){
length[ i ]=0;
}
for(i=0;i<n;i++){
c=0;
d=10000000;
scanf("%d %d",&s,&b);
if(c<b){
c=b;
}
if(d>s){
d=s;
}
if(s!=b){
for(j=s;j<=b;j++){
length[ j ]=1;
}
}
}
a=0;
for(i=d;i<=c;i++){
a+=length[ i ];
}
printf("%d\n",a);
}
return 0;
}
#include
int main(void){
int a,c,n,b,s;
unsigned int i,j,d,length[10000001];
while(scanf("%d",&n)!=EOF){
for(i=0;i<=10000000;i++){
length[ i ]=0;
}
for(i=0;i<n;i++){
c=0;
d=10000000;
scanf("%d %d",&s,&b);
if(c<b){
c=b;
}
if(d>s){
d=s;
}
if(s!=b){
for(j=s;j<=b;j++){
length[ j ]=1;
}
}
}
a=0;
for(i=d;i<=c;i++){
a+=length[ i ];
}
printf("%d\n",a);
}
return 0;
}
開這麼大的陣列當然會RE
如果要開,請宣告在main()以外
當然這題就算這麼做還是會TLE的
請找出更有效率的方法
#include
int main(void){
int a,c,n,b,s;
unsigned int i,j,d,length[10000001];
while(scanf("%d",&n)!=EOF){
for(i=0;i<=10000000;i++){
length[ i ]=0;
}
for(i=0;i<n;i++){
c=0;
d=10000000;
scanf("%d %d",&s,&b);
if(c<b){
c=b;
}
if(d>s){
d=s;
}
if(s!=b){
for(j=s;j<=b;j++){
length[ j ]=1;
}
}
}
a=0;
for(i=d;i<=c;i++){
a+=length[ i ];
}
printf("%d\n",a);
}
return 0;
}
開這麼大的陣列當然會RE
如果要開,請宣告在main()以外
當然這題就算這麼做還是會TLE的
請找出更有效率的方法
謝謝,瞭解了