简单模拟题

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

考虑蛇的移动

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. ulimit常用参数介绍

    ulimit常用参数介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. ulimit 用于限制 shell 启动进程所占用的资源,支持以下各种类型的限制:所创建的内核文件的大小.进 ...

  2. ansible指路篇-安装及基本命令使用

    ansible指路篇-安装及基本命令使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是ansible ansible是新出现的自动化运维工具,基于Python开发,集合 ...

  3. nginx: [warn] duplicate MIME type "text/html"错误

    检查配置文件时提示:nginx: [warn] duplicate MIME type "text/html" in /home/web/nginx/inc/gzip.conf:9 ...

  4. Python基础【day01】:表达式if ...else语句(三)

    本节内容 用户输入 表达式if ...else语句 作业需求 一.用户输入 1 2 3 4 5 6 7 #!/usr/bin/env python #_*_coding:utf-8_*_     #n ...

  5. Linux命令之grep

    grep命令 用处:文本搜索工具 用法:grep + ‘查找关键字的名字’ + 文件名 示例: 还在profile里面查找then 干净利落强大,有关then的信息显示

  6. 简易ATM机

    简易ATM机(代码如下): /* * 功能:简易银行系统 */package day8; import java.util.Scanner; /** * * @FengYan Huang Admini ...

  7. JAVA记录-Mybatis介绍

    1.什么是 MyBatis ? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyB ...

  8. ssm框架结构的搭建

    ssm框架结构的搭建

  9. .Net进阶系列(15)-异步多线程(线程的特殊处理和深究委托赋值)(被替换)

    1. 线程的异常处理 我们经常会遇到一个场景,开启了多个线程,其中一个线程报错,导致整个程序崩溃.这并不是我们想要的,我需要的结果是,其中一个线程报错,默默的记录下,其它线程正常进行,保证程序整体可以 ...

  10. 13. Spring Boot 拦截器

    1.thymeleaf  页面修改后可能不会实时反馈到Web,做2步骤: 1)禁用掉tymleaf 缓存: spring.thymeleaf.cache=false 2)IDE编辑器:Ctrl + F ...