None_g @ 2023-05-14 17:29:27
用的题解里ChargeDonkey大佬的思路
思路:
第一遍,将路上的所有树打上标记,表示这个点没有被访问过。
第二遍,读入区间的头和尾,从这个区间的头开始循环,到尾结束,标记为访问过。
第三遍,顺序访问路上的树,只要没访问过,计数加1,这样就求出了路上所有还存在的树的数目。
编了个代码,又改了改,如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10001],b[10001],c[10001];
int x,l,m,i,j;
cin>>l>>m;
for (i=0;i<=m;i+=2)
{
cin>>c[i]>>c[i+1];
}//c[i]为一个区域的起始点和终止点的坐标。
for (i=0;i<=l;i+=2)
a[i]=1;
for (i=0;i<=l;i+=2)
{
for (j=c[i];j<=c[i+1];j+=2)
{
a[j]=0;
}
}
for (i=0;i<=l;i++)
{
if (a[i]==1)
x=x+1;
}
cout<<x;
return 0;
}
全部WA,求救(悲
by sjy_2023 @ 2023-05-14 17:33:25
for (i=0;i<=l;i+=2)
a[i]=1;
i+=2 ? ? ?
by sjy_2023 @ 2023-05-14 17:34:48
循环好像都写成+=2了
by None_g @ 2023-05-14 17:36:28
@zwbsszd 改成了
i++
但还是不行(悲
by sjy_2023 @ 2023-05-14 17:37:01
坐标最好分两个数组存
by sjy_2023 @ 2023-05-14 17:44:10
读入坐标是从1开始
by sjy_2023 @ 2023-05-14 17:55:05
哦知道了
找坐标的外层循环也从1开始
而且是到m 不是l
by sjy_2023 @ 2023-05-14 17:55:35
AC:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10001],b[10001],q[10001],w[10001];
int x=0,l,m,i,j;
cin>>l>>m;
for (i=1;i<=m;i++)
{
cin>>q[i]>>w[i];
}
for (i=0;i<=l;i++)
a[i]=1;
for (i=1;i<=m;i++)
{
for (j=q[i];j<=w[i];j++)
{
a[j]=0;
}
}
for (i=0;i<=l;i++)
{
if (a[i]==1)
x++;
}
cout<<x;
return 0;
}
by sjy_2023 @ 2023-05-14 17:57:31
@3316084249z
by None_g @ 2023-05-14 21:01:08
@zwbsszd 欸嘿,谢谢大佬,照着思路改了改,全AC
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[10001],b[10001],c[10001];
int x,l,m,i,j;
x=0;
cin>>l>>m;
for (i=1;i<=m+1;i++)
{
cin>>b[i]>>c[i];
}//b[i] c[i]为一个区域的起始点和终止点的坐标。
for (i=0;i<=l;i++)
a[i]=1;
for (i=1;i<=m;i++)
{
for (j=b[i];j<=c[i];j++)
{
a[j]=0;
}
}
for (i=0;i<=l;i++)
{
if (a[i]==1)
x=x+1;
}
cout<<x;
return 0;
}
by None_g @ 2023-05-14 21:08:52
@zwbsszd 为什么
for (i=1;i<=m+1;i++)
{
cin>>b[i]>>c[i];
}//b[i] c[i]为一个区域的起始点和终止点的坐标。
这里
i<=m+1
在C++软件里F11运行复制粘贴题目中的输入
500 3
150 300
100 200
470 471
回车没反应,但能通过题目