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服务未正常运行及安装 ...
随机推荐
- 一个U盘制作多个系统
写在前面:一个U盘可以装多个ghost系统,但不能装多个原版ISO系统. 一.一个U盘装多个ghost系统 下载老毛桃或电脑店U盘制作工具,点击一键制作U盘启动盘.然后将gho文件拷贝复制到U盘的GH ...
- geth run
geth --networkid 1201 --rpc --rpcapi eth,net,web3,personal,admin,miner --rpccorsdomain "*" ...
- 【SpringBoot】整体下载大文件与分批下载大文件(利用MySql数据库的Limit实现)
在前文里谈过一次性从数据库取一个大结果集有可能导致outofMemory,当时的想法是分批去取回来,今天把它实现了,特地把代码分享出来: 工程下载:https://files.cnblogs.com/ ...
- Oracle 的 oracle 数据库分类
一.数据库分类 1.小型数据库:access.foxbase 2.中型数据库:informix.sql server.mysql 3.大型数据库:sybase.db2.oracle 二.项目中如何合理 ...
- C++ STL Heap算法
#include <iostream>#include <algorithm>#include <vector> using namespace std; int ...
- mongodb中对数组的操作命令
mongodb中对数组的操作命令有$push.$ne.$addtoset.$pop.$pull ###addtoset会碰到的问题addtoset解释: 往数组里面加入数据,如果数组里已经存在,则不会 ...
- Run Hyper-V and VirtualBox on the same machine (轉載)
Run Hyper-V and VirtualBox on the same machine Posted on September 5, 2012 by derek gusoff Recently ...
- jquery+flask+keras+nsfw快速搭建一个简易鉴黄工具
1. demo 地址:http://www.huchengchun.com:8127/porn_classification 接口说明: 1. http://www.huchengchun.com:8 ...
- 安装flask_mysqldb出现报错问题解析
安装 mysqldb (pip3 install Flask-MySQLdb)报错 EnvironmentError: mysql_config not found ERROR: Command er ...
- Linux下运行《UNIX环境高级编程》undefined reference to `err_quit 编译出错的处理方法
错误信息: : undefined reference to `err_quit': undefined reference to `err_sys' 解决方法: 因为err_quit跟err_sys ...