解题思路:
定义一个数组;数组下标代表数轴上的每个整数点即0,1,2,……,n(长度为500的公路有501颗树);
把这个数组初始化全为1(为1代表有树,0代表被移除);
输入移除区域(x,y),把这个区域上的树全置0;(有多个,用循环控制);
输出为1的树的数目;
注意事项:
数轴上的0点也有数;
参考代码:
//C++ #include <iostream> using namespace std; int main() { int L,M,x,y,a[10001]; cin>>L>>M; for(int i=0;i<=L; i++) //先将数组全赋值为1 a[i]=1; for(int i=0; i<M; i++) { cin>>x>>y; //[x,y]为区域区间 for(int j=x; j<=y; j++) //将区域区间内的值赋为0 a[j]=0; } int sum=0; for(int i=0; i<=L; i++) { if(a[i]==1) //如果数组元素值是1 则计数加1 sum++; } cout<<sum; return 0; }
//C #include <stdio.h> //初始化数组值为1 void InitArray(int *a,int num) { for(int i=0; i<=num; i++) { a[i]=1; } } //将要移除的区域(x,y)置为0 void InitZero(int *a,int x,int y) { for(int i=x; i<=y; i++) { a[i]=0; } } //输出值为1的即为结果 void Result(int *a,int L) { int sum=0; for(int i=0; i<=L; i++) { if(a[i]==1) sum++; } printf("%d",sum); } int main() { int a[10001]; //题意L<=10000 int L,M,x,y; while(scanf("%d%d",&L,&M)) { InitArray(a,L); for(int i=0; i<M; i++) { scanf("%d%d",&x,&y); InitZero(a,x,y); } Result(a,L); } return 0; }
0.0分
27 人评分