while_for @ 2024-11-22 19:46:39
c++11,只A了前3个点
#include<bits/stdc++.h>
using namespace std;
int a[1000000000];
int n,m;
int c,z;
int cz;
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>c>>z;
for(int i=c;i<=z;i++){
a[i]++;
}
}
for(int i=0;i<n;i++){
if(a[i]==0){
cz++;
}
}
cout<<cz;
return 0;
}
by wyhwhs @ 2024-11-22 22:02:52
@while_for第三行a[10000+10]就行(比题目规定大10就行),太大可能会装不下
第15行for(int i=0;i<=n;i++){ if(a[i]==0){ cz++; } }改成i<=n,因为长度是0到n,两端都要算上,没有等号就会少算末尾那棵
萌新指导勿喷(dogs)
by wyhwhs @ 2024-11-22 22:03:37
#include<bits/stdc++.h>
using namespace std;
int a[10000+10];//数据比题目多10即可太多可能会装不下
int n,m;
int c,z;
int cz;
int main(){
cin>>n>>m;
for(int i=0;i<m;i++){
cin>>c>>z;
for(int i=c;i<=z;i++){
a[i]++;
}
}
for(int i=0;i<=n;i++){//最后一棵树没有记录到i<=n
if(a[i]==0){
cz++;
}
}
cout<<cz;
return 0;
}
最终代码
by while_for @ 2024-11-23 08:15:25
@wyhwhs 谢谢,这题我大号在两年半前A了,忘记怎么写了
by Dave123 @ 2024-11-24 19:38:19
@while_for 其实还有更简单的写法
#include <iostream>
using namespace std;
#include <set>
int main() {
int l, m;
cin >> l >> m;
set<int> trees;
for (int i = 0; i < m; i++) {
int u, v;
cin >> u >> v;
for (int j = u; j <= v; j++) {
trees.insert(j);
}
}
cout << l + 1 - trees.size() << endl;
return 0;
}