历届试题 填字母游戏

参考

资源限制

时间限制:1.0s 内存限制:256.0MB

问题描述

小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说:
  “我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了”。
  K大师在纸上画了一行n个格子,要小明和他交替往其中填入字母。
  并且:
  1. 轮到某人填的时候,只能在某个空格中填入L或O
  2. 谁先让字母组成了“LOL”的字样,谁获胜。
  3. 如果所有格子都填满了,仍无法组成LOL,则平局。

小明试验了几次都输了,他很惭愧,希望你能用计算机帮他解开这个谜。

输入格式

第一行,数字n(n<10),表示下面有n个初始局面。
  接下来,n行,每行一个串,表示开始的局面。
  比如:“**”, 表示有6个空格。“L”, 表示左边是一个字母L,它的右边是4个空格。

输出格式

要求输出n个数字,表示对每个局面,如果小明先填,当K大师总是用最强着法的时候,小明的最好结果。
  1 表示能赢
  -1 表示必输
  0 表示可以逼平

样例输入

4
***
L**L
L**L***L
L*****L

样例输出

0
-1
1
1

题目总结:

小明填完最后一个空格后:
1、组成 “LOL” 能赢。2、没有空格 平局。3、除了这两种可能之外必输
解题思路:dfs算法,一路走到底最后组成“LOL”能赢,没有空格平局,否则必输
dfs算法的两个关键点:1、不撞南墙不回头 2、回溯
本题使用 map 模板的主要作用是:记录最终答案。
(原来不了解 map ,以为有特殊的作用花了半天的时间去了解,)

AC代码

主要代码是 dfs算法 ,包括出口部分,递归部分

#include <iostream>
#include <algorithm>
#include <map>
#include <cstring>
#include <string>
using namespace std;
string sc;
map<string,int> map_LOL;int dfs()
{//设置出口//出口1:已经找到最终的结果 if(map_LOL.count(sc)){return map_LOL[sc];} //出口2:在字符串中找到 “LOL” ,能赢 // !!!! 之所以不返回 1 是因为在进行下个 dfs的时候会出问题// 问题描述:假如这次dfs由 出口2 返回,设置 map_LOL[sc] = 1;//在下次 dfs 时 出口1 与 出口2 的返回值是一样的,会导致混淆。  if(sc.find("LOL") != -1){return -1;} //出口2:在字符串中没有找到  “ * ” 说明已经没有空格,平局 if(sc.find("*") == -1){return 0;}bool isPing = false; //遍历字符串 for(int i = 0; i < sc.size(); i++){//当前位置为空 if(sc[i] == '*'){//dfs 算法的主要内容:修改,递归,回溯 sc[i] = 'L';int f = dfs();sc[i] = '*'; //已经确定能赢就不需要尝试其他方法 if(f == -1){   return map_LOL[sc] = 1;} //如果这次是平局,则先记录,继续尝试其他方法 if(f == 0){isPing = true;} //尝试填入另一个字符 sc[i] = 'O';f = dfs();sc[i] = '*';if(f == -1){return map_LOL[sc] = 1;}if(f == 0){isPing = true;}}        } //尝试完所有的可能还是平局 if(isPing){return map_LOL[sc] = 0;} //最终小明没有能赢和平局 return  map_LOL[sc] = -1;
}int main(int argc, char** argv) {int n;cin >> n;for(int i = 0; i < n; i++){cin >> sc;cout << dfs() << endl;}return 0;
}

历届试题 填字母游戏相关推荐

  1. 蓝桥杯---试题 历届试题 填字母游戏(博弈)

    试题 历届试题 填字母游戏 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏 ...

  2. 蓝桥杯 历届试题 填字母游戏

    文章目录 问题描述 输入格式 输出格式 样例输入 样例输出 解题思路: 解题代码: 问题描述   小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的 ...

  3. Java实现蓝桥杯历届试题填字母游戏

    题目描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了".K大师在纸上画了一行n个格子,要小明 ...

  4. 蓝桥杯- 历届试题 填字母游戏

    传送门 问题描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...

  5. 2017年第八届蓝桥杯C/C++ A组国赛 —— 第四题:填字母游戏

    标题:填字母游戏 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...

  6. c语言填字母游戏蓝桥杯,蓝桥杯2017国赛JAVAB组 填字母游戏 题解

    标题:填字母游戏 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...

  7. 蓝桥杯2017国赛JAVAB组 填字母游戏 题解

    标题:填字母游戏 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...

  8. 2017年第八届蓝桥杯 JavaB组国赛 第五题 填字母游戏

    标题:填字母游戏 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格 ...

  9. 闲聊蓝桥杯JAVA - 填字母游戏

    填字母游戏 D:今天是一道很有游戏感的题目(只是蹭LOL热度): 标题:填字母游戏小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能 ...

  10. 蓝桥杯刷题021——填字母游戏(DFS)

    2017国赛  题目描述 小明经常玩 LOL 游戏上瘾,一次他想挑战 K 大师,不料 K 大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩 LOL 了". K 大 ...

最新文章

  1. linux c 链接详解4-共享库
  2. 【组合数学】排列组合 ( 多重集排列 | 多重集全排列 | 多重集非全排列 所有元素重复度大于排列数 | 多重集非全排列 某些元素重复度小于排列数 )
  3. 原来,07年我把自己给和谐了
  4. XGBoost相关知识-1
  5. python中类中属性和方法的具体定义方法和使用
  6. 寻找mysql的data文件夹得方式
  7. Redis 缓存常见问题:缓存一致性的解决方案
  8. .config 和 kconfig以及 makefile的关系
  9. ORA-06550 PLS-00172 字符串太长 超过3W 处理方式
  10. System学习笔记001---WIN10 win10按哪里哪里出现蓝色框
  11. 【CentOS 7笔记43】,防火墙和iptables filter表#
  12. spark记录(7)SparkCore的调优之数据倾斜调优
  13. TCP客户端与服务器的实现
  14. win10系统文件夹黑色的背景色如何更改为白色?
  15. php+mysql任务网源码
  16. 160813_qt显示阿拉伯输入法9x7点阵
  17. 【数据预处理】sklearn实现数据预处理(归一化、标准化)
  18. 分解质因数_java
  19. 学生HTML个人网页作业作品下载 个人主页博客网页设计制作 大学生个人网站作业模板 简单个人网页制作
  20. CentOS7.3下Zabbix3.5之微信报警配置

热门文章

  1. Command not found 解决
  2. 微软升级网页版Skype 没有帐户也能拨打网络电话
  3. 中科银谷:企查查天眼查的企业工商数据是从哪里来的?
  4. Origin 数据渐变色
  5. 百度地图api去除logo,以及三维按钮
  6. 关于如何保持图片分辨率并压缩图片存储大小
  7. 关于传奇客户端及补丁文件相关合集
  8. HDMI 分配器正确使用方法
  9. [渝粤教育] 南京森林警察学院 森林植物识别技术 ——珍稀植物识别 参考 资料
  10. 深入 CoreML 模型定义