记录14
#include <bits/stdc++.h>
using namespace std;
int main() {
int l,m,u,v,a[10010]={},cnt=0;
cin>>l>>m;
for(int i=0;i<=l;i++) a[i]=1;
for(int i=1;i<=m;i++){
cin>>u>>v;
for(int j=u;j<=v;j++) a[j]=0;
}
for(int i=0;i<=l;i++) if(a[i]==1) cnt++;
cout<<cnt;
return 0;
}
突破点
将这些树都移走后,马路上剩余的树木数量👉求范围数的情况
区域之间可能有重合的部分,现在要把这些区域中的树(包括区域端点处的两棵树)移走
👉大范围内去除小范围的数,同时可能小范围有重叠
思路
- 既然去除范围数,直接开数组,下标来对应范围数,数组下标一开始都是1,代表有效数
- 把要去除的范围内的数,下标改为0,表示不能用
- 记录范围内有效的下标数量
代码简析
int l,m,u,v,a[10010]={},cnt=0;
a[10010]={}数组开到10010的原因是:
对于 100% 的数据,保证 1≤l≤
如果程序出现RE情况,注意下是不是数组的范围小了,关于RE的常出现问题跟解决方法,我会放在文章的补充部分
注意:a[10]={0}可表示a[10]的每一个存储都是0,但是a[10]={1},只有a[0]=1,其他都是0。为了方便,我们可以采用a[10]={}的操作来进行初始化a数组都为0
for(int i=0;i<=l;i++) a[i]=1;
要是想让数组a都为1,那么通过循环来初始化数组为1(即道路上种满了树)
for(int i=1;i<=m;i++){
cin>>u>>v;
for(int j=u;j<=v;j++) a[j]=0;
}
把出现的无效数的下标(即题目中要去除的树)都改为0
for(int i=0;i<=l;i++) if(a[i]==1) cnt++;
最后从头到尾来看一下还有哪些有效数(即道路上还剩哪些树),cnt++数一下
注意:for循环与if条件判断,只有一行代码的时候,可以不加{},直接写在一行就行了
补充
在洛谷平台上,运行时错误(Runtime Error,简称RE)通常是因为程序在运行过程中遇到了一些异常情况,导致无法正常执行。以下是一些常见的导致RE的原因及其解决方法:
1. 数组越界
数组越界是导致RE的常见原因之一。当访问数组时,如果下标超出了数组的声明范围,就会导致运行时错误。
解决方法:
确保数组的大小足够大,能够容纳所有需要的数据。
检查循环的终止条件,确保不会访问数组之外的元素。
2. 数组开太大
如果数组的大小设置得过大,超出了内存限制,也会导致RE。
解决方法:
根据实际需要合理设置数组大小,避免浪费内存。
3. 除以零
在程序中出现除以零的操作,会导致运行时错误。
解决方法:
在进行除法运算前,检查除数是否为零,避免除以零的情况。
4. 递归或循环导致的栈溢出
如果递归或循环的深度过大,可能会导致栈溢出,从而引发RE。
解决方法:
优化递归或循环逻辑,减少深度。
如果可能,尝试将递归转换为迭代。
5. 非法内存访问
访问未初始化的内存或已释放的内存,也可能导致RE。
解决方法:
确保所有变量在使用前都已正确初始化。
避免访问已释放的内存。
6. 输入输出格式问题
洛谷对输入输出格式要求严格,如果输出格式不符合要求,可能会导致RE。
解决方法:
仔细检查题目要求的输入输出格式,确保程序的输出完全符合要求。
7. 编译器和环境差异
洛谷使用特定版本的编译器,可能与本地开发环境不同。某些新特性或语法可能在洛谷环境中不被支持。
解决方法:
检查洛谷使用的编译器版本,并确保代码兼容该版本。
避免使用洛谷编译器不支持的新特性。
8. 文件编码问题
洛谷仅支持标准UTF-8编码,如果文件编码不正确,可能会导致编译错误。
解决方法:
使用文本编辑器检查并转换文件编码为标准UTF-8。
9. 头文件路径差异
洛谷环境中不存在自定义头文件或路径,依赖外部库的代码可能无法正常编译。
解决方法:
确保所有头文件都存在于洛谷的环境中,或者使用标准库头文件。
10. 宏定义冲突
洛谷环境预定义了部分宏,这些宏可能与代码中定义的宏发生冲突。
解决方法:
避免使用常见的宏名称,或者使用条件编译指令来规避冲突。
通过以上方法,可以有效排查和解决洛谷平台上出现的RE问题。
592

被折叠的 条评论
为什么被折叠?



