AAAuc03 @ 2024-08-23 14:51:29
#include <bits/stdc++.h>
using namespace std;
int main()
{
int l,n,u,v;
cin>>l>>n;
int sum=l+1;
for(int i=0;i<n;i++)
{
cin>>u>>v;
sum-=v-u+1;
}
cout<<sum;
return 0;
}
by AAAuc03 @ 2024-08-23 14:52:05
解答出来者,悬赏关注
by ___Segment___ @ 2024-08-23 14:55:50
@AAAuc03 你这个好像样例都没过。
如果两个用来建地铁的区域重叠了(比如样例),那么你的代码会重复计算。
由于没办法直接在你的代码上改,所以给出我的 AC code:
#include<bits/stdc++.h>
using namespace std;
int a[10001]={0};
int main()
{
int l,m,u,v,s=0;
cin>>l>>m;
for(int i=1;i<=m;i++)
{
cin>>u>>v;
for(int j=u;j<=v;j++)
{
a[j]=1;
}
}
for(int w=0;w<=l;w++)
{
if(a[w]==0) s++;
}
cout<<s;
return 0;
}
by w_gaoch @ 2024-08-25 21:52:09
这是我的
#include<bits/stdc++.h>
using namespace std;
int a[10005],x,y,l,r,cnt=0;
int main(){
cin>>x>>y;
for(int i=0;i<=x;i++){
a[i]=1;
}
for(int i=1;i<=y;i++){
cin>>l>>r;
for(int j=l;j<=r;j++){
a[j]=0;
}
}
for(int i=0;i<=x;i++){
if(a[i]==1){
cnt++;
}
}
cout<<cnt;
return 0;
}
你把它抽象化成一个零一组合,1为没移走的,0就是移走的,选定每一组数据的首尾做替换即可 求关注!!
by DeImage @ 2024-08-26 17:06:05
用 bool 类型可能会容易理解一些。 建地铁的地方把值修改为 true。
#include<bits/stdc++.h>
using namespace std;
int l, m;
bool k[10001]; //默认值为 false
int main() {
scanf("%d%d", &l, &m);
for (int i = 1; i <= m; i++) {
int a, b;
scanf("%d%d", &a, &b);
for (int j = a; j <= b; j++) //开头到结尾全部改为 true
k[j] = true;
}
int s = 0;
for (int i = 0; i <= l; i++) //看看哪些仍然为 false
if (! k[i])
s++;
printf("%d", s);
}
不然只能拿