https://www.acwing.com/problem/content/424/
1、直接模拟
1 #include<iostream> 2 using namespace std; 3 const int N=10010; 4 bool a[N]; 5 int main(void){ 6 int l,m; 7 cin>>l>>m; 8 for(int i=0;i<m;i++){ 9 int left,right; 10 cin>>left>>right; 11 for(int j=left;j<=right;j++){ 12 a[j]=true; 13 } 14 } 15 int res=0; 16 for(int i=0;i<=l;i++){ 17 if(!a[i]){ 18 res++; 19 } 20 } 21 cout<<res; 22 return 0; 23 }
2、差分思想
1 #include<iostream> 2 using namespace std; 3 const int N=10010; 4 int a[N]; 5 int main(void){ 6 int l,m; 7 cin>>l>>m; 8 for(int i=0;i<m;i++){ 9 int left,right; 10 cin>>left>>right; 11 a[left]+=1; 12 a[right+1]-=1; 13 } 14 int res=a[0]==0?1:0; 15 for(int i=1;i<=l;i++){ 16 a[i]+=a[i-1]; 17 if(a[i]==0) 18 res++; 19 } 20 cout<<res; 21 return 0; 22 }
3、区间合并
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 typedef pair<int,int> PII; 5 PII a[110]; 6 int main(void){ 7 int l,m; 8 cin>>l>>m; 9 for(int i=0;i<m;i++){ 10 cin>>a[i].first>>a[i].second; 11 } 12 sort(a,a+m); 13 int ed=0; 14 int res=0; 15 for(int i=0;i<m;i++){ 16 int left=a[i].first,right=a[i].second; 17 if(left>ed){ 18 res+=left-ed; 19 } 20 ed=max(ed,right+1); 21 } 22 if(ed<l){ 23 res+=l-ed+1; 24 } 25 cout<<res; 26 return 0; 27 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端