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服务未正常运行及安装 ...
随机推荐
- DSSM算法-计算文本相似度
转载请注明出处: http://blog.csdn.net/u013074302/article/details/76422551 导语 在NLP领域,语义相似度的计算一直是个难题:搜索场景下quer ...
- Android:高通平台性能调试
1.GPU / CPU 信息打印脚本 gpu_cpu_info.bat @echo off echo "==================GPU====================== ...
- kotlin函数的参数和返回值
fun main(arg: Array<String>) { val asList = asList(, , , , , ) println(asList) } fun <T> ...
- 数据分析 - Excel 综合实例 - 杜邦分析法
项目背景 杜邦分析法 利用 杜邦分析法完成对一份数据的动态分析 流程图如下 项目源数据 左侧为竖向的数据管理, 右侧为横向的数据管理 横向的数据管理在数据透视的时候会很不方便, 并不推荐 常用叫法左边 ...
- 虚拟化技术实现 — KVM 的 CPU 虚拟化
目录 文章目录 目录 前文列表 x86 体系结构的虚拟化 硬件辅助的 CPU 虚拟化 由 VMX 切换支撑的 CPU 虚拟化技术 KVM 的 CPU 虚拟化实现 vCPU 的调度方式 客户机 CPU ...
- 快速根据注释生成接口文档网页工具——Apidoc的使用教程
1,安装Node.js的npm工具环境: 如有不懂,请看我的博客:“https://blog.csdn.net/sinat_28371057/article/details/81612661“ 2,n ...
- ubuntu docker 环境安装
转载:https://www.cnblogs.com/blog-rui/p/9946382.html 1. 在Ubuntu中安装Docker 更新ubuntu的apt源索引 sudo apt-get ...
- git_push报错
转自 https://blog.csdn.net/u010042585/article/details/79378726 将本地项目push到GitHub时遇到的问题 .$ git remote ad ...
- swift 第七课 xib 约束的优先级
前期要实现 一个自适应的label 的时候,就知到xib 约束是有优先级的,一直为深入研究: 乘写这个 博客的机会 ,试验下xib 约束的等级 …… 抱歉要查资料,在重新实践,先把主要浏览的网页 连接 ...
- 小程序签名MD5加密
最近小程序需求一个签名加密,要把请求参数按键值排序并转化为字符串,然后进行MD5加密. //时间戳 var timestamp = (Date.parse(new Date()))/1000;//签名 ...