hdu5965 2016CCPC
来源:互联网 发布:淘宝达人怎么修改昵称 编辑:程序博客网 时间:2024/06/02 02:39
传送门
题意:中文题
题解:在做这个题的时候的困难无非就是确定每一列上有多少个地雷,每一列上最多只有0,1,2三种情况。那么我们可以通过枚举第一列的情况,那么在第一列上有多少地雷我们已知的情况下,可以通过第一个数字确定第二列有多少地雷,然后可以通过第二列的数字和第一列第二列上地雷的数目确定第三列有多少地雷。全部统计下来,然后计算就可以了。
#include<bits/stdc++.h>using namespace std;const int maxn = 10005;const int mod = 1e8+7;char s[maxn];int num[maxn],dp[maxn];int main(){ int t; scanf("%d",&t); while (t--) { memset(s,0,sizeof s); memset(num,0,sizeof num); memset(dp,0,sizeof dp); scanf("%s",s); int len = strlen(s); for (int i = 0; i < len ; i++) { num[i] = s[i] - '0'; } int flag = 0; int ans = 0,sum = 0; for (int i = 0; i <= 2; i++) { if(i > num[0])break; flag = 0,ans = 1; dp[0] = i; dp[1] = num[0] - dp[0]; if(dp[1] < 0 || dp[1] > 2)continue; for (int j = 2; j < len; j++) { dp[j] = num[j - 1] - dp[j - 1] - dp[j - 2]; if(dp[j] < 0||dp[j] > 2) { flag = 1; break; } } if(dp[len - 1] < 0||dp[len - 2] + dp[len - 1] != num[len - 1]||dp[len - 1] > 2)flag = 1; if(flag) continue; if(ans == 0)ans = 1; for (int j = 0; j < len; j++) { if (dp[j] == 1) { ans *= 2; } ans %= mod; } sum = (ans + sum)%mod; } printf("%d\n",sum); }}
阅读全文
0 0
- hdu5965 2016CCPC
- 2016 ccpc 合肥 HDU5965 扫雷
- 2016CCPC
- HDU5965--2016年中国大学生程序设计竞赛(合肥)
- hdu5965扫雷
- bfs hdu5965
- HDU5965-扫雷
- hdu5965(思维)
- 2016 ccpc网络赛
- 2016 ccpc 长春站
- 2016CCPC合肥总结
- 2016杭州ccpc
- 2016 ccpc 总决赛
- CCPC 2016-2017 Finals
- 2016 CCPC-Final A
- 2016 CCPC-Final B
- 【2016 CCPC-Final】B
- CCPC-final 2016 B
- 第六章 Canny算子
- Session与cookie的区别详解
- maven 检查jar依赖冲突和版本冲突 以及解决
- Hibernate缓存机制之快照
- 华为云服务器java环境配置
- hdu5965 2016CCPC
- Flume初学习
- Oracle数据库(常用的函数)
- 手机内存应该看ROM还是RAM
- 递归与分治策略-2.8快速排序
- 1082. Read Number in Chinese (25)
- Android 硬件版本问题(M/Q/O/RM)
- 前端自动化构建工具Grunt
- 基于XCP协议分析和理解