第一次CSP模拟总结

题目三:可怕的宇宙射线
宇宙射线会在无限的二维平面上传播(可以看做一个二维网络图),初始方向默认向上,宇宙射线会在发射一段距离后分裂,向该方向的左右45度方向分裂出两条宇宙射线,同时威力不变!宇宙射线会分裂n次,每次分裂后会在分裂方向前进ai个单位长度。要求计算出共有多少个位置会被打击;
输入描述:
输入第一行包含一个正整数n(n<=30),表示宇宙射线会分裂n次
输入第二行包含n个正整数a1,a2…an,第i个数ai(ai<=5)表示第i次分裂的宇宙射线会在它原方向上继续走多少个单位长度。
输出描述:
输出一个数ans,表示会有多少个位置会被打击;
样例输入:
4
4 2 2 3
样例输出:
39
题目分析:可以首先感觉到,宇宙射线一直在做着重复的事情,并且是一分为二,则在做题目时应当直接反应出利用dfs递归深度搜索即可,当然,利用bfs也可以处理,但是感觉bfs要维护与注意的东西比较多。对于这种dfs递归深搜和一棵二叉树从根遍历一个感觉,主要体会其中的一分为几的分叉思想。当然,简单的dfs深搜肯定是要超时的,因为搜索次数是指数级增长的,但题目中明确提到每次走的距离不超过5,这也就限定了射线所波及到的范围,所以我们可以利用记忆化搜索排查已经做过的工作,在这里我们要利用数组进行记忆,在考试时自己利用了map,但是map是需要维护结构的,故其肯定会造成时间上的浪费。在这里,我们应当认识到,对于记忆化的东西,我们大多是依靠一个数组进行记忆的,这样操作和查询都很简单。同样,在这里我们应当明白,对于一个射线发射,其是由四元构成的。1,横坐标;2,纵坐标;3,方向;4,第几次移动;所以我们在进行记忆时,维护的应当是四维的一个量。另外,在下面的代码中,其中的分叉处理的不够好,造成了很大的冗余,对于此,分叉过程利用一个小循环处理比较好。因为八个方向围成了一个圈,对于圈这种结构,我们实现循环的做法大多是利用指定数组,并加上取模的运算实现。

#include<iostream>
#include<string.h>
using namespace std;
int ans=0;
int cc;
bool mp[310][310];
bool mp2[310][310][7][30];
void func(int x,int y,int* dis,int sty,int n) {
	if(n==cc) {
		return;
	}
	if(mp2[x][y][sty][n]==1)
	return;
	mp2[x][y][sty][n]=1;
	if(sty==0) {
		for(int i=1; i<=dis[n]; i++) {

			if(mp[x+i][y+i]==0) {
				ans++;
				mp[x+i][y+i]=1;
			}
			if(mp[x-i][y+i]==0) {
				ans++;
				mp[x-i][y+i]=1;
			}
		}
		func(x+dis[n],y+dis[n],dis,1,n+1);
		func(x-dis[n],y+dis[n],dis,7,n+1);
	} else if(sty==1) {
		for(int i=1; i<=dis[n]; i++) {

			if(mp[x][y+i]==0) {
				ans++;
				mp[x][y+i]=1;
			}
			if(mp[x+i][y]==0) {
				ans++;
				mp[x+i][y]=1;
			}
		}
		func(x,y+dis[n],dis,0,n+1);
		func(x+dis[n],y,dis,2,n+1);
	} else if(sty==2) {
		for(int i=1; i<=dis[n]; i++) {

			if(mp[x+i][y+i]==0) {
				ans++;
				mp[x+i][y+i]=1;
			}
			if(mp[x+i][y-i]==0) {
				ans++;
				mp[x+i][y-i]=1;
			}
		}
		func(x+dis[n],y+dis[n],dis,1,n+1);
		func(x+dis[n],y-dis[n],dis,3,n+1);
	} else if(sty==3) {
		for(int i=1; i<=dis[n]; i++) {

			if(mp[x+i][y]==0) {
				ans++;
			    mp[x+i][y]=1;
			}
			if(mp[x][y-i]==0) {
				ans++;
				mp[x][y-i]=1;
			}
		}
		func(x+dis[n],y,dis,2,n+1);
		func(x,y-dis[n],dis,4,n+1);
	} else if(sty==4) {
		for(int i=1; i<=dis[n]; i++) {

			if(mp[x-i][y-i]==0) {
				ans++;
				mp[x-i][y-i]=1;
			}
			if(mp[x+i][y-i]==0) {
				ans++;
				mp[x+i][y-i]=1;
			}
		}
		func(x+dis[n],y-dis[n],dis,3,n+1);
		func(x-dis[n],y-dis[n],dis,5,n+1);
	} else if(sty==5) {
		for(int i=1; i<=dis[n]; i++) {

			if(mp[x-i][y]==0) {
				ans++;
				mp[x-i][y]=1;
			}
			if(mp[x][y-i]==0) {
				ans++;
				mp[x][y-i]=1;
			}
		}
		func(x-dis[n],y,dis,6,n+1);
		func(x,y-dis[n],dis,4,n+1);
	} else if(sty==6) {
		for(int i=1; i<=dis[n]; i++) {

			if(mp[x-i][y-i]==0) {
				ans++;
				mp[x-i][y-i]=1;
			}
			if(mp[x-i][y+i]==0) {
				ans++;
				mp[x-i][y+i]=1;
			}
		}
		func(x-dis[n],y-dis[n],dis,5,n+1);
		func(x-dis[n],y+dis[n],dis,7,n+1);
	} else if(sty==7) {
		for(int i=1; i<=dis[n]; i++) {

			if(mp[x-i][y]==0) {
				ans++;
				mp[x-i][y]=1;
			}
			if(mp[x][y+i]==0) {
				ans++;
				mp[x][y+i]=1;
			}
		}
		func(x-dis[n],y,dis,6,n+1);
		func(x,y+dis[n],dis,0,n+1);
	}
}
int main() {
	memset(mp,0,sizeof(mp));
	memset(mp2,0,sizeof(mp2));
	cin>>cc;
	int* dis=new int[cc];
	for(int i=0; i<cc; i++) {
		cin>>dis[i];
	}
	for(int i=0; i<dis[0]; i++) {
		mp[150][150+i]=1;
		ans++;
	}
	func(150,150+dis[0]-1,dis,0,1);
	cout<<ans<<endl;
}在这里插入代码片
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧办公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧办公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧办公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧办公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧办公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧办公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值