Play Open
Loading Please wait Loading Please wait Loading Please wait Loading Please wait Loading Please wait Loading Please wait

牛客竞赛 1018 扫雷MINE

题意

给定2行的矩阵 , 第一行为扫雷的格子 , 即描述下方最近3格的雷的个数 ; 第二行为雷或空

求满足第一列限制的第二列的雷摆放方法数

思路

本来以为是dp , 没想到是思维题..

考虑已经知道第i个格子有没有雷和对应的数字

数字有三种可能 , 0 , 1, 2

如果是0 , 那么下一个格子肯定没有雷 ;

如果是1 , 那么根据当前i格子有无雷可以知道下一个格子 ;

如果是2,3 , 那么肯定有

感悟是读完题一定要耍几个例子试试 , 不要空想

代码

#include

using namespace std;

const int N = 1e4+10;

int a[N];

int main() {

int n;

cin >> n;

for (int i = 1; i <= n; i++) cin >> a[i];

int ans = 0;

for (int init = 0; init <= 1; init++) {

int valid = 1;

int pre = 0, f = init;

if ((f==0 && a[1] >=2) || (f==1 && a[1] == 0)) continue;

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

int tmp = f;

f = a[i-1] - f- pre;

pre = tmp;

if (f < 0 || f > 1) {

valid = 0;

break;

}

}

if (f + pre != a[n])

valid = 0;

if (valid) ans++;

}

cout << ans;

return 0;

}

//1 1 2 1 1

//1 0 1 1 0

//0 1 0 1 0

Copyright © 2088 世界杯亚洲区预选赛程|世界杯队伍|i史商店世界杯历史宝库站|istoryshop.com All Rights Reserved.
友情链接