列表

详情


NC20241. [SCOI2005]扫雷MINE

描述

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

输入描述

第一行为N,第二行有N个数,依次为第二列的格子中的数。(1 ≤ N ≤ 10000)

输出描述

一个数,即第一列中雷的摆放方案数。

示例1

输入:

2
1 1

输出:

2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

Python3 解法, 执行用时: 48ms, 内存消耗: 4792K, 提交时间: 2023-02-15 20:37:47

n=int(input())
lst=list(map(int,input().split()))
q=2
for j in range(2):
    f=[0]*len(lst)
    f[0]=j
    for i in range(1,len(lst)):
        f[i]=lst[i-1]-f[i-1]-f[i-2]
        if f[i]!=0 and f[i]!=1:
            q-=1
            break
        if i==n-1 and f[-1]+f[-2]!=lst[-1]:
            q-=1
print(q)
        
    





C++(clang++ 11.0.1) 解法, 执行用时: 4ms, 内存消耗: 412K, 提交时间: 2023-03-08 18:56:52

#include<iostream>
using namespace std;
int n,a[10005],f[10005],ans=0;
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i];
	for(int i=0;i<=a[1];i++)
	{
		f[1]=i;
		for(int j=2;j<=n+1;j++)
		f[j]=a[j-1]-f[j-1]-f[j-2];
		if(f[n+1]==0) ans++;
	}
	cout<<ans;
}

上一题