cpython3


私信TA

用户名:smartZhou

访问量:80415

签 名:

等  级
排  名 35
经  验 14006
参赛次数 1
文章发表 99
年  龄 0
在职情况 学生
学  校
专  业 计算机科学与技术

  自我简介:

解题思路:
定义一个数组;数组下标代表数轴上的每个整数点即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 人评分

  评论区

反人类的思路
2024-11-16 20:47:50
666
2024-11-03 10:10:17
确实牛逼
2024-10-17 00:43:40
也可以用0代表有树,1代表没有,这样初始化数组的时候更方便,不需要用循环
2024-08-04 10:53:45
nb
2024-08-04 10:41:31
粗人只会一句牛逼
2024-03-12 08:52:01
真tm牛逼
2023-12-12 20:37:19
牛逼,用0和1来记录某个位置有没有树,这样就可以只对某位置的树排查一次而不用排查多次了
2023-11-23 09:39:29