简单模拟题

用一个数据结构存储这条蛇

考虑蛇的移动

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贪吃蛇】的更多相关文章

  1. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  2. 用C++实现的贪吃蛇游戏

    我是一个C++初学者,控制台实现了一个贪吃蛇游戏. 代码如下: //"贪吃蛇游戏"V1.0 //李国良于2016年12月29日编写完成 #include <iostream& ...

  3. [LeetCode] Design Snake Game 设计贪吃蛇游戏

    Design a Snake game that is played on a device with screen size = width x height. Play the game onli ...

  4. JavaScript-简单的贪吃蛇小游戏

    实现逻辑: //获取Html中的格子(行,列) //建立数组存储所有格子(x,y) //建立数组用于存储蛇身(x,y) //生成随机坐标(x,y)的函数 //随机创建蛇身并存储到蛇身数组 //创建食物 ...

  5. juery实现贪吃蛇的游戏

    今天用juery做了一个贪吃蛇的游戏,代码比较简陋,不过作为这些天学习juery的成果,非常有成就感.另外关于代码内容如有雷同不胜荣幸. 更改了下 让头和身子的颜色不一样 这样好区分些,虽然还是不怎么 ...

  6. HTML 5 背离贪吃蛇 写成了类似于屏幕校准

    中间写了改 改了写 还是没做出自己满意的效果 ,看来自己的确不是一个走前端的料子.当然h5还是学一点好一点 具体说来 就是 在canvas 的画布中 鼠标点击后画上一个圆形 然后就有随机的在画布上面出 ...

  7. 控制台游戏引擎CGE——贪吃蛇

    今天我也来发一个控制台游戏.先看图: 缘起 LZ是一个有严重拖延症的人,表现的形式就是隔一段时间就要刷一刷博客园. 这不前几天,看到了魏大师<使用Lua脚本语言开发出高扩展性的系统...> ...

  8. 原生JS制作贪吃蛇小游戏

    感情都在代码里,来,干了!... <!doctype html> <html> <head> <meta http-equiv="Content-T ...

  9. 基于AT89C51单片机的贪吃蛇电子游戏(仿真)

    有关贪吃蛇的历史发展可以看一下这个网址,贪吃蛇最初的设计和现在并不相同..http://www.techweb.com.cn/internet/2013-02-21/1278055.shtml 该项目 ...

随机推荐

  1. linu查看当前目录下文件大小

    查看当前目录下文件大小 [root@izm5e33l0ge76tvdj3qtnfz var]# du -sh * .0K adm 190M cache .0K crash 24K db .0K emp ...

  2. Swing的特性

    1.Swing组件的多样化 2.MVC(model-view-controller)体系结构 3.可存取性支持 4.支持键盘代替鼠标的操作 5.设置边框 6.使用图标 ———————————————— ...

  3. Qt Designer 的使用

    1. Qt Designer 快速入门 Qt Designer 是交互式可视化GUI设计工具,可以帮助我们快速开发 PyQt 程序的速度. 它生成的 UI 界面是一个后缀为 .ui 的文件,可以通过 ...

  4. 【Python】统计个人新浪微博词频并给出相应的柱状图

    Python爬虫视频教程零基础小白到scrapy爬虫高手-轻松入门 https://item.taobao.com/item.htm?spm=a1z38n.10677092.0.0.482434a6E ...

  5. JAVA记录-Spring两大特性

    1.IOC控制反转 Ioc—Inversion of Control,即“控制反转”,不是什么技术,而是一种设计思想.在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象 ...

  6. JAVA记录-SpringMVC国际化配置

    1.搭建SpringMVC框架,不过多阐述 2.spring-mvc.xml加入以下配置: <!-- 国际化资源配置,资源文件绑定器--> <bean id="messag ...

  7. Neural Networks and Deep Learning(week4)Deep Neural Network - Application(图像分类)

    Deep Neural Network for Image Classification: Application 预先实现的代码,保存在本地 dnn_app_utils_v3.py import n ...

  8. linux 命令收集 阿里云nginx升级等 查看磁盘空间 版本等

    —————————————————— 查磁盘 df -h此命令直观的呈现出磁盘大小有多少Gdf -hl文件系统 容量 已用 可用 已用% 挂载点/dev/hdb2 75G 75G 0 100% /就是 ...

  9. Dojo与jQuery综合比较分析

    最近一直都在参与项目,无法抽空写些或者看些东西,周末抽了点时间看了下关于Dojo和Jquery的东西,在CSDN上看到一篇两个框架进行对比的文章,感觉写的不错,就拿了过来,没有别的意思,一来想保留下来 ...

  10. HDU4738 Caocao's Bridges【强连通】

    题意: 曹操有N个岛,这些岛用M座桥连接起来,每座桥有士兵把守(也可能没有),周瑜想让这N个岛不连通,但只能炸掉一座桥,并且炸掉一座桥需要派出不小于守桥士兵数的人去,桥的守兵数为0时,也需要派出一个人 ...