原题链接:https://www.luogu.com.cn/problem/P1047
#include <bits/stdc++.h>
using namespace std;
int main()
{
int m,l,u,v;
cin>>l>>m;
short yn[l]={0},s=0;
for(int i=0;i<m;i++){
cin>>u>>v;
for(int j=u;j<=v;j++) yn[j]=1;
}
for(int i=0;i<=l;i++)
if(yn[i]==0) s++;
cout<<s<<endl;
return (0);
}
这段码根据下图改的
引用头文件<bits/stdc++.h>它不是标准C++库的一部分。应该使用具体的标准库头文件。在声明 int m,l,u,v;
之后,直接在数组 short yn[l]={0},s=0;
中使用变量 l
作为数组长度是不允许的,因为C++中的数组大小必须是一个常量表达式。这里可以改为先读取输入的 l
值并进行赋值。循环 for(int i=0;i<=l;i++)
会导致数组越界访问,因为数组 yn
的有效下标是从0到 l-1
。所以在这个循环中应该修改为 for(int i=0;i<l;i++)
。在输出结果 cout<<s<<endl;
后面的 (0)
不必要,可以直接写成 return 0;
。