CCF - CCSP 2018-01 绝地求生 BFS






BFS从安全地区方向搞一下就好了
1.还是注意每回合清空
2.posx居然开小了,可不能犯这种错误
3.地图用a和节点的dis重名了,建议其他变量禁止用a命名
4.在输入数据之前continue了,这样会导致读数据混乱
5.注意距离还是用勾股定理那种,不是你想象的曼哈顿距离,火焰纹章玩多了吧
#include <set>
#include <map>
#include <cmath>
#include <queue>
#include <bitset>
#include <stack>
#include <vector>
#include <string>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <functional>
#define ll long long
#define mm0(a) memset(a,0,sizeof(a))
#define mm(a,b) memset(a,b,sizeof(a))
#define each(a,b,c) for(int a=b;a<=c;a++)
#define de(x) cout << #x << " " << (x) <<endl
//#define de(x) cout <<""
#define rush() int T;scanf("%d",&T);each(kase,1,T)
#define scan(a,b) scanf("%d%d",&a,&b)
#define fin(a) scanf("%d",&a)
using namespace std;
const int maxn = 400+5;
const int maxm = 1e5+5;
const int INF = 0x3f3f3f3f;
inline int read(){int s=0;char ch=getchar();for(; ch<'0'||ch>'9'; ch=getchar());for(; ch>='0'&&ch<='9'; ch=getchar())s=s*10+ch-'0';return s;}
/**
4 2 4 1 1
0 3
1 1
2 2
3 0
1 2
2 0
2 3 2
1 3
3 3
n m e f h
*/
int distance(int x,int y,int sx,int sy)
{
return abs(x-sx)*abs(x-sx)+abs(y-sy)*abs(y-sy);
}
int n,m,e,f,h;
int a[maxn][maxn];
int vis[maxn][maxn];
int dis[maxn][maxn];
int dx[]={0,0,1,-1,1,1,-1,-1};
int dy[]={1,-1,0,0,-1,1,-1,1};
int posx[maxm];
int posy[maxm];///开小了
int life[maxm];
struct node
{
int x,y;
int dis;
node(int x,int y,int dis):x(x),y(y),dis(dis){}
};
int main()
{
scanf("%d%d%d%d%d",&n,&m,&e,&f,&h);
each(i,1,e)
{
int x,y;
scan(x,y);
a[x][y]=1;
}
each(i,1,m)
{
scanf("%d%d",&posx[i],&posy[i]);
}
each(i,1,m)
life[i]=h;
while(f--)
{
///每回合清空
mm0(vis);
memset(dis,INF,sizeof(dis));
int sx,sy,r;///又重名了!!!!
scan(sx,sy);
scanf("%d",&r);
queue<node>Q;
while(!Q.empty())Q.pop();
each(i,0,n-1)
{
each(j,0,n-1)
{
if(distance(i,j,sx,sy)<=r*r)
{
vis[i][j]=1;
dis[i][j]=0;
Q.push(node(i,j,0));
}
}
}
while(!Q.empty())
{
node q=Q.front();
Q.pop();
int x=q.x;
int y=q.y;
int curdis=q.dis;
int nx,ny;
for(int i=0;i<=7;i++)
{
nx=x+dx[i];
ny=y+dy[i];
if(!vis[nx][ny]&&nx>=0&&ny>=0&&nx<n&&ny<n&&a[nx][ny]==0)
{
if(abs(dx[i])!=abs(dy[i])||!(a[nx][y]==1&&a[x][ny]==1))
{
vis[nx][ny]=1;
dis[nx][ny]=curdis+1;///重名
Q.push(node(nx,ny,curdis+1));
}
}
}
}
each(k,1,m)
{
int xx,yy;
scan(xx,yy);
if(life[k]==0)continue;///错误3
int cost=dis[posx[k]][posy[k]];
if(cost>=life[k])
life[k]=0;
else life[k]-=cost;
posx[k]=xx;
posy[k]=yy;///错误4
}
}
each(i,1,m)
{
printf("%d\n",life[i]);
}
return 0;
}
CCF - CCSP 2018-01 绝地求生 BFS的更多相关文章
- “知乎杯”2018 CCF 大学生计算机系统与程序设计竞赛 绝地求生(battleground)
/* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-ts ...
- kaggle——绝地求生游戏最终排名预测
绝地求生游戏最终排名预测 知识点 数据读取与预览 数据可视化 构建随机森林预测模型 导入数据并预览 先导入数据并预览.本次实验同样来源于 Kaggle 上的一个竞赛: 绝地求生排名预测 ,由于原始数据 ...
- 在moba游戏里面模拟实现绝地求生毒雾圈功能
---恢复内容开始--- 已经有很长一段时间没做项目了上半年大多数时间都荒废在王者荣耀,哈哈,S8赛季也上了王者,美滋滋 转回正题,公司需要开个新项目,需要把原有的moba游戏,改成类似绝地求生那玩法 ...
- 落入绝地求生的Python神仙,实现绝地求生无后座!
叙述 绝地求生已经出来那么久了,大家应该都晓得如今的游戏情形很是差 .特别在高端局,神仙满天飞 搞得很多人类玩家很是没有游戏体验! 由于绝地求生的火爆,繁衍出许多外挂流传于各个地方.飞机上.网吧内,各 ...
- 洗礼灵魂,修炼python(41)--巩固篇—从游戏《绝地求生-大逃杀》中回顾面向对象编程
声明:本篇文章仅仅以游戏<绝地求生>作为一个参考话题来介绍面向对象编程,只是作为学术引用,其制作的非常简易的程序也不会作为商业用途,与蓝洞公司无关. <绝地求生>最近很火,笼络 ...
- IDEA(2018.01)安装和破解
IDEA(2018.01)安装和破解 1.下载IDE https://www.jetbrains.com/idea/download/#section=windows 选择Ultimate版本 2.下 ...
- SUST OJ 1642: 绝地求生—死亡顺序
1642: 绝地求生-死亡顺序 时间限制: 1 Sec 内存限制: 128 MB提交: 81 解决: 53[提交][状态][讨论版] 题目描述 最近陕西科技大学六公寓的小东同学深深的入迷了一款游戏 ...
- 绝地求生大逃杀BE启动失败,应用程序无法正常启动
今日更新绝地求生大逃杀后部分客户反馈绝地求生点击启动提示BE安装,应用程序无法启动 问题原因:经过排查发现,客户开启过超级工作站运行过游戏,在系统镜像包中保留了旧版的BE服务,致使新版BE无法安装,冲 ...
- 《绝地求生大逃杀》BE错误怎么办 BE服务未正常运行及安装失败解决方法
<绝地求生大逃杀>BattlEye Launcher是游戏的反作弊程序,也是启动过程中做容易出现错误的,今天小编带来“爆锤吧务”分享的<绝地求生大逃杀>BE服务未正常运行及安装 ...
随机推荐
- springboot 整合缓存(Ehcache或者reids)
这里介绍Spring Boot结合JPA,MySQL和Ehcache实现缓存功能,提高程序访问效率. 一.Maven依赖 <!-- caching --> <dependency&g ...
- JAVA 基础编程练习题41 【程序 41 猴子分桃】
41 [程序 41 猴子分桃] 题目:海滩上有一堆桃子,五只猴子来分.第一只猴子把这堆桃子凭据分为五份,多了一个,这只猴子把 多的一个扔入海中,拿走了一份.第二只猴子把剩下的桃子又平均分成五份,又多了 ...
- Ubuntu 18.04 下 PostgreSQL 10 的安装与基础配置
下载安装 在命令行执行如下语句: apt-get install postgresql-10 该指令会帮助你下载如下PostgreSQL组件: name |explain | ------------ ...
- JavaScript:undefined!=false之解 及==比较的规则
JS中有一个基本概念就是: JavaScript中undefined==null 但undefined!==null undefined与null转换成布尔值都是false 如果按照常规想法,比如下面 ...
- windows10专业版激活方法
1.首先在桌面左下角的“cortana”搜索框中输入“CMD”,待出现“命令提示符”工具时,右击选择“以管理员身份”运行. 2.此时将“以管理员身份”打开“MSDOS”窗口,在此界面中,依次输出以下命 ...
- unity三维地球模型生成
准备一张贴图 创建材质球 球面坐标系转直角坐标系 x=rsinθcosφ. y=rsinθsinφ. z=rcosθ. 效果如下 脚本如下 using System.Collections; ...
- 撸一个vue的双向绑定
1.前言 说起双向绑定可能大家都会说:Vue内部通过Object.defineProperty方法属性拦截的方式,把data对象里每个数据的读写转化成getter/setter,当数据变化时通知视图更 ...
- 攻防世界WEB新手练习
0x01 view_source 0x02 get_post 这道题就是最基础的get和post请求的发送 flag:cyberpeace{b1e763710ff23f2acf16c2358d3132 ...
- 【VS开发】CString 转为 char *方法大全
[VS开发]CString 转为 char *方法大全 标签(空格分隔): [VS开发] 方法1: CString strTemp; char szTemp[128]; strTemp = _T(&q ...
- 【转帖】Webmin 安装 (centos7 rpm 方式)
https://www.cnblogs.com/osfipin/p/5948803.html 这两天公众号都在手这个小工具, 今天早上试了下 挺好用的 还看到了启动 samba 的方法. 一会儿 再学 ...