http://acm.hdu.edu.cn/showproblem.php?pid=5965

(合肥)区域赛签到题。。。orz

题意:3*n的地图上扫雷(规则就是正常扫雷),中间一排全部没有雷,且全部被点掉并显示出数字,问一共有多少种雷的排列情况。

题解:先注意到每列只有两格能放雷,如此一来0,2颗雷都只有一种情况。1颗雷两种可能,即ans*=2.

然后考虑怎么知道每一列有几颗雷。如果知道了第i列和i-1列的雷数第i+1列的雷数为num[i]-dp[i-1]-dp[i],num是中间那行的输入数据。dp不是动态规划只是个递推数组,表示第i列有几个雷。初始i=1可以猜0,1,2三种情况,i=2只需要i=1就能推出来。

坑点:cin>>s tle;vs不能用gets,忘了getchar();mod is not always 1e9+5;flag ok 放到循环外面了。

ac代码:

#include<iostream>
#include<string>
#include<string.h>
#include<stdio.h> using namespace std;
const int mod=1e8 + ;
const int maxn = 1e4 + ;
int dp[maxn], num[maxn];
int main() {
int t;
cin >> t;
getchar();
while (t--) {
memset(dp, , sizeof(dp));
memset(num, , sizeof(num));
char s[maxn];
gets(s);
//if (s == "2") {
// cout << 1 << endl; break;
//}
int len = strlen(s);
for (int i = ; i < len; i++) {
num[i + ] = s[i] - '';
}
int ans = ;
for (int j = ; j <= num[]; j++) {
int ok = ;
if (j > )break;
dp[] =j;
int i;
for ( i = ; i <= len; i++) {
dp[i] = num[i - ] - dp[i - ] - dp[i - ];
if (dp[i] > || dp[i] < ) {
ok = ; break;
}
}
if ((i == len + )&&dp[len] + dp[len - ] != num[len])ok = ;
//if ()ok = 0;
int p = ;
if (ok) {
for (int i = ; i <= len; i++)if (dp[i] == )p = (p * ) % mod;
ans = (ans + p) % mod;
}
}
cout << ans<<endl;
}
}

HDU-5965 扫雷 模拟+想法的更多相关文章

  1. HDU 5965 扫雷 【模拟】 (2016年中国大学生程序设计竞赛(合肥))

    扫雷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  2. HDU 5965 枚举模拟 + dp(?)

    ccpc合肥站的重现...一看就觉得是dp 然后强行搞出来一个转移方程 即 根据第i-1列的需求和i-1 i-2列的枚举摆放 可以得出i列摆放的种类..加了n多if语句...最后感觉怎么都能过了..然 ...

  3. HDU 5965 扫雷

    扫雷游戏是晨晨和小璐特别喜欢的智力游戏,她俩最近沉迷其中无法自拔. 该游戏的界面是一个矩阵,矩阵中有些格子中有一个地雷,其余格子中没有地雷. 游戏中,格子可能处于己知和未知的状态.如果一个己知的格子中 ...

  4. HDU 5965 扫雷(dfs)题解

    题意:给你一个3*n的格子,中间那行表明的是周围8格(当然左右都没有)的炸弹数量,上下两行都可以放炸弹,问你有几种可能,对mod取模 思路:显然(不),当i - 1和i - 2确定时,那么i的个数一定 ...

  5. Hdu OJ 5965 扫雷(递推)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5965 题目大意:中文题,自己读 解图思路:对于每一列都有三种情况--0, 1, 2. 如果第一列确定地 ...

  6. HDU 5965(三行扫雷 dp)

    题意是在一个 3 行 n 列的图上进行扫雷,中间一行没有雷,且中间一行的每一格都会显示周围的雷数,问根据已知的雷数在上下两行设置地雷的方法数. 分析知每一列所填雷数的和与周围的雷数有关,但每列具体的填 ...

  7. HDU 5965:扫雷(DP,递推)

    扫雷 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submissi ...

  8. HDU 4121 Xiangqi 模拟题

    Xiangqi Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=4121 ...

  9. hdu 5071 Chat(模拟)

    题目链接:hdu 5071 Chat 题目大意:模拟题. .. 注意最后说bye的时候仅仅要和讲过话的妹子说再见. 解题思路:用一个map记录每一个等级的妹子讲过多少话以及是否有这个等级的妹子.数组A ...

随机推荐

  1. C++实现按1的个数排序

    题目内容:有一些0.1字符串,将其按1的个数的多少的顺序进行输出. 输入描述:本题只有一组测试数据.输入数据由若干数字组成,它是由若干个0和1组成的数字. 输出描述:对所有输入的数据,按1的个数进行生 ...

  2. 在Visual Stdio 2012中编译执行JM18.6的方法

    JM是H.264编码的官方实现,与X264开源实现相比,JM的实现比較完整,代码更加规范.并且同一时候提供了编码和解码过程.便于对照分析.可是JM的最大缺点是效率比X264低.因此.非常多应用都基于X ...

  3. mongodb常用操作命令(待续)

    1. 开启mongodb命令 >mongo 默认链接到test数据库 2. 显示所有数据库>show dbs 3.切换数据库>use 数据库名 4.查找数据库里某张表的所有成员> ...

  4. php mongodb manager 查数据的各种姿势

    一.连接 mongodb 数据库 以下操作默认都是以上面操作为前提(已连接成功)而做的操作 二.查的各种姿势 1)通过主键_id来查询,注意:_id不是直接用字符串来表示,要用 new \MongoD ...

  5. Git 学习笔记--Eclipse Git 插件安装

    http://benjsicam.me/blog/how-to-setup-eclipse-git-plugin-egit-for-github-part-1-tutorial/ http://ben ...

  6. 怎么打乱List中元素的顺序

    使用Collections类中shuffle随机打乱List内部元素顺序 原文地址:http://blog.csdn.net/warren2013/article/details/17414771 / ...

  7. transformClassesWithJarMergingForDebug

    Error:Execution failed for task ':app:transformClassesWithJarMergingForDebug'.> com.android.build ...

  8. php技能评测

    以下摘抄自:https://www.viphper.com/?p=1236 公司出了一些自我评测的PHP题目,现将题目和答案记录于此,以方便记忆. 1. 魔术函数有哪些,分别在什么时候调用?__con ...

  9. C++多线程编程简单实例

    C++本身并没有提供任何多线程机制,但是在windows下,我们可以调用SDK win32 api来编写多线程的程序,下面就此简单的讲一下: 创建线程的函数 HANDLE CreateThread( ...

  10. css 去除页面双击事件

    -ms-touch-action: manipulation !important;