BZOJ 1088 模拟

来源:互联网 发布:冰川网络不败传说官网 编辑:程序博客网 时间:2024/06/06 04:47

题意:现在棋盘是n×2的扫雷游戏,第一列里面某些格子是雷,而第二列没有雷。由于第一列的雷可能有多种方案满足第二列的数的限制,你的任务即根据第二列的信息确定第一列雷有多少种摆放方案。

只要确定了第一行的前两列是什么,后面都可以唯一确定。因此讨论一下即可。

#include <bits/stdc++.h>using namespace std;namespace solver {    int n, t[11111], val[11111];    bool check() {        for(int i = 2; i < n; i++) {            int d = val[i] - t[i-1] - t[i];            if(d != 0 && d != 1)                return 0;            t[i+1] = d;        }        if(val[n] != t[n-1] + t[n]) return 0;        return 1;    }    void solve() {        scanf("%d", &n);        for(int i = 1; i <= n; i++)            scanf("%d", &val[i]);        int ans = 0;        if(val[1] == 1) {            memset(t, 0, sizeof t);            t[1] = 0, t[2] = 1;            ans += check();            memset(t, 0, sizeof t);            t[1] = 1, t[2] = 0;            ans += check();        } else if(val[1] == 0){            t[1] = t[2] = 0;            ans += check();        } else {            t[1] = t[2] = 1;            ans += check();        }        printf("%d\n", ans);    }}int main() {    solver::solve();    return 0;}
原创粉丝点击