简单模拟题

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

考虑蛇的移动

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. 牛客多校第三场 A- PACM Team 背包/记忆路径

    https://www.nowcoder.com/acm/contest/141#question 一眼背包,用四维dp记录在A,B,C,D条件限制下可以获得的最大知识点,但是题目要求输出路径,在输入 ...

  2. Post和get请求时中文乱码

    在web.xml中加入: <filter> <filter-name>CharacterEncodingFilter</filter-name> <filte ...

  3. Java_myBatis_xml代理写法

    这种开发方式只需要写好Mapper.xml和对应的Interface就可以了. 1.编写Mapper.xml <?xml version="1.0" encoding=&qu ...

  4. Spring_bean的实例化时机

    前言:创建Java对象 public class User { private String name; private Integer age; public User() { System.out ...

  5. 5、Python-字典

    定义 info = {'name': '班长', 'id': 88, 'sex': 'man', 'address': '地球亚洲中国北京'} print(info['name']) print(in ...

  6. C#在Win10与非Win10 Windows系统鼠标滚动编程的一点区别。

    C#在win10和非Win10上处理鼠标滚动有一些区别,建一个Form1,放置一个FlowLayoutPanel ,类型的Panel1 Panel.MouseWheel += PanelOnMouse ...

  7. Mac下使用Wine安装PowerDesigner15

    下载: (链接: https://pan.baidu.com/s/1bpEYyIV 密码: 5ymj) 安装: 1.安装Wine 参考:http://www.cnblogs.com/EasonJim/ ...

  8. Javaweb中提到的反射浅析(附源码)

    反射:一个jdk5.0的新特性,高级运用.在后期的框架中,这个是一大重点,现在估计我们都不会太多的接触他的.但是为了后面的铺垫,我想还是先了解一下: 先构造一个类,然后我们用反射来获取,调用里面的方法 ...

  9. HDU4685 Prince and Princess【强连通】

    题意: 有n个王子和m个公主,每个王子都会喜欢若干个公主,也就是王子只跟自己喜欢的公主结婚,公主就比较悲惨, 跟谁结婚都行.然后输出王子可能的结婚对象,必须保证王子与任意这些对象中的一个结婚,都不会影 ...

  10. A - 低阶入门膜法 - K-th Number (主席树查询区间第k小)

    题目链接:https://cn.vjudge.net/contest/284294#problem/A 题目大意:主席树查询区间第k小. 具体思路:主席树入门. AC代码: #include<i ...