码迷,mamicode.com
首页 > 其他好文 > 详细

scoi

时间:2014-11-16 10:38:17      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:io   sp   for   on   问题   bs   amp   res   nbsp   

相信大家都玩过扫雷的游戏。那是在一个n*m的矩阵里面有一些雷,要你根据一些信息找出雷来。万圣节到了,“余”人国流行起了一种简单的扫雷游戏,这个游戏规则和扫雷一样,如果某个格子没有雷,那么它里面的数字表示和它8连通的格子里面雷的数目。现在棋盘是n×2的,第一列里面某些格子是雷,而第二列没有雷,如下图: 由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案 。

1<= N <= 10000 

2

1 1

2

题解:

输入的n个数为a[1],a[2]..a[n],表示的是周围的雷数。假设第i行的雷数为b[i],那么得到递推式:b[i]=a[i-1]-b[i-1]-b[i-2]。

意思是当b[i-1]和b[i-2]得出结果后,b[i]的值是固定的,唯一不确定的是b[1],可以使b[1]的值为0,1各做一次递推。若任意b[i]的值为0或1,则答案加1。到此问题解决。

(答案只能为0..2)

#include <cstdio>

using namespace std;

 

const int maxn = 10010;

int a[maxn], ans[maxn];

 

int main() 

{

        int n,res=0;

bool ok=false;

        scanf("%d",&n);

        for (int i=1;i<=n;i++)

                scanf("%d",&a[i]);

        for (ans[1] = 0; ans[1] <= 1; ans[1]++) {

                ans[2] = a[1] - ans[1]; ok = false;

                for (int i = 3; i <= n; i++) {

                        ans[i] = a[i-1] - ans[i-1] - ans[i-2];

                        if (ans[i] < 0) {

                                ok = true; break;

                        }

                }

                if (ans[n] == a[n] - ans[n-1] && !ok) res++;

        }

        printf("%d\n", res);

        return 0;

}

 

scoi

标签:io   sp   for   on   问题   bs   amp   res   nbsp   

原文地址:http://www.cnblogs.com/a972290869/p/4101089.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!