Luogu P4944 【PION贪吃蛇】
简单模拟题
用一个数据结构存储这条蛇
考虑蛇的移动
1,如果死了,就把整个蛇清空,所有位置标记为食物
2,如果吃了东西,把这个位置更新为蛇头
3,如果正常走路,这个位置设为蛇头,同时删掉尾巴
蛇的存储?观察到我们涉及的所有操作,双端队列无疑是$The~~Best~~Choice$
#include<iostream>
#include<cstdio>
#include<queue>
#include<map>
#include<algorithm>
using namespace std;
//q.front -> head
//q.back -> tail
//mp{
// 0 -> square ; 1 -> edge ; 2-> food
//}
const int dx[]={,-,,};
const int dy[]={,,-,};
struct pos{
int x,y;
};
struct length{
int id,len;
}ans[];
map<char,int>to;
deque<pos>sk[];
int n,m,k,mp[][],cnt;
char s[][],op[][];
void bfs(int id,int x,int y)
{
queue<pos>q;
q.push((pos){x,y});
while(!q.empty())
{
pos u=q.front();
sk[id].push_back(u);
mp[u.x][u.y]=;
q.pop();
for(int i=;i<;i++)
{
pos th;
th.x=u.x+dx[i];
th.y=u.y+dy[i];
if(s[th.x][th.y]=='#')
q.push(th),s[th.x][th.y]='.';
}
}
}
void work(int x)
{
for(int i=;i<=cnt;i++)
{
if(!sk[i].size())
continue;
pos th;
th.x=sk[i].front().x+dx[to[op[i][x]]];
th.y=sk[i].front().y+dy[to[op[i][x]]];
if(mp[th.x][th.y]==)
sk[i].push_front(th),mp[th.x][th.y]=;
else if(mp[th.x][th.y]==)
while(!sk[i].empty())
{
mp[sk[i].front().x][sk[i].front().y]=;
sk[i].pop_front();
}
else
{
mp[sk[i].back().x][sk[i].back().y]=,mp[th.x][th.y]=;
sk[i].push_front(th),sk[i].pop_back();
}
}
}
bool cmp(const length &x,const length &y)
{
return x.len==y.len?x.id<y.id:x.len>y.len;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
to['W']=,to['S']=,to['A']=,to['D']=;
for(int i=;i<=n;i++)
mp[i][]=mp[i][m+]=;
for(int i=;i<=m;i++)
mp[][i]=mp[n+][i]=;
for(int i=;i<=n;i++)
scanf("%s",s[i]+);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(s[i][j]=='&')
mp[i][j]=;
else if(s[i][j]=='@')
bfs(++cnt,i,j);
for(int i=;i<=cnt;i++)
scanf("%s",op[i]+);
for(int i=;i<=k;i++)
work(i);
for(int i=;i<=cnt;i++)
ans[i].len=sk[i].size(),ans[i].id=i;
sort(ans+,ans+cnt+,cmp);
for(int i=;i<=cnt;i++)
printf("%d %d\n",ans[i].len,ans[i].id);
int res=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
if(mp[i][j]==)
res++;
printf("%d\n",res);
return ;
}
Luogu P4944 【PION贪吃蛇】的更多相关文章
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...
- 用C++实现的贪吃蛇游戏
我是一个C++初学者,控制台实现了一个贪吃蛇游戏. 代码如下: //"贪吃蛇游戏"V1.0 //李国良于2016年12月29日编写完成 #include <iostream& ...
- [LeetCode] Design Snake Game 设计贪吃蛇游戏
Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...
- JavaScript-简单的贪吃蛇小游戏
实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...
- juery实现贪吃蛇的游戏
今天用juery做了一个贪吃蛇的游戏,代码比较简陋,不过作为这些天学习juery的成果,非常有成就感.另外关于代码内容如有雷同不胜荣幸. 更改了下 让头和身子的颜色不一样 这样好区分些,虽然还是不怎么 ...
- HTML 5 背离贪吃蛇 写成了类似于屏幕校准
中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子.当然h5还是学一点好一点 具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出 ...
- 控制台游戏引擎CGE——贪吃蛇
今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...
- 原生JS制作贪吃蛇小游戏
感情都在代码里,来,干了!... <!doctype html> <html> <head> <meta http-equiv="Content-T ...
- 基于AT89C51单片机的贪吃蛇电子游戏(仿真)
有关贪吃蛇的历史发展可以看一下这个网址,贪吃蛇最初的设计和现在并不相同..http://www.techweb.com.cn/internet/2013-02-21/1278055.shtml 该项目 ...
随机推荐
- Eclipse使用总结(不定时更新)
1.安装activiti插件 (1)在线下载 点击Add输入Location:http://activiti.org/designer/update/ Name:Activiti (2)本地安装 ...
- JVM总结(六):早期(编译期)优化
这节我们来总结一下JVM编译器优化问题. JVM编译器优化 Javac编译器 Javac的源码和调试 解析与填充符号表 注解处理器 语法分析与字节码生成 Java语法糖 泛型和类型擦除 自动装箱.拆箱 ...
- docker基础篇
下载,安装 安装Windows社区版 官网地址:https://store.docker.com/editions/community/docker-ce-desktop-windows?tab=de ...
- nginx的负载均衡配置,常用策略
场景:nginx是一款非常优秀的负载均衡服务器,小巧而且性能强悍,中小型企业的首选. 下面介绍nginx的负载均衡的几种常见的配置以及优缺点 第一种:轮询(默认) 优点:实现简单 缺点:不考虑每台服务 ...
- CentOS6.8下搭建zookeeper web界面查看工具node-zk-browser
zookeeper的web界面查看工具Node-ZK-Browser的界面是用nodejs写的今天试着搭建了下. 1. 安装nodejs [root@localhost product]# pwd / ...
- go函数练习
1.编写程序,在终端输出九九乘法表. package main import ( "fmt" ) func main() { for i := 1; i <= 9; i++ ...
- Ubuntu 16.04及以上 安装/卸载 Docker-CE
前言 本文仅针对Ubuntu 18.10.18.04.16.04的x86_64的OS与架构下的Docker-CE的安装 卸载老板本 如果已安装,请卸载它们: sudo apt-get remove d ...
- TCP/IP详解 卷1 第十八章 TCP的建立与终止
第十八章 TCP的建立与终止 tcpdump Tcpdump可以将网络中传送的数据报完截获下来进行分析.它支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉 ...
- 主窗口QMainWindow和启动画面
在较为大型复杂,功能较多的应用程序中,我们通常继承QMainWindow类来进行开发.该主窗口为搭建应用用户界面提供了非常好的框架,请看下图: 可以看出该主窗口类为我们提供了菜单栏(Menu Bar) ...
- 第16月第17天 contentMode
1. self.contentMode = UIViewContentModeScaleAspectFill; self.clipsToBounds = YES; http://blog.csdn.n ...