1. 程式人生 > 其它 >洛谷P2327 [SCOI2005]掃雷 題解

洛谷P2327 [SCOI2005]掃雷 題解

技術標籤:tagicpcbugandroid studiomodbus

[SCOI2005]掃雷 - 洛谷

description:

一個

n\times 2 的棋盤。已知右側一列全部沒有雷,且已知第 i 行相應的格子為 a_i ,表示八聯通的格子內共有 a_i 個雷。求左側一列可能的雷的方案數。

solution:

觀察發現,決定一個格子是否是雷的限制非常少。甚至可以進一步得出結論:雷的方案數不超過

2

我們列舉方案即可。

(1,1) 格子分別放上雷或者不放雷。那麼依次向下遞推可以得出每個格子唯一的是否放雷的方案。

注意:最終要判斷後兩個雷是否符合

a_n !!!!!

code:

#include
<cstdio> using namespace std; int b[10005],a[10005]; int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } if(n==1) { printf("1\n"); return 0; } int ans=0; b[1]=0; for(int i=2;i<=n;i++) { b[i]=a[i-1]-b[i-1]-b[i-2
]; } int tag=0; for(int i=1;i<=n;i++) { if(b[i]!=0&&b[i]!=1) { tag=1; break; } } if(tag==0&&b[n-1]+b[n]==a[n])ans++; b[1]=1; for(int i=2;i<=n;i++) { b[i]=a[i-1]-b[i-1]-b[i-2]; } tag=0; for(int i=1;i<=n;i++) { if(b[i]!=0&&b[i]!=1) { tag=1;
break; } } if(tag==0&&b[n-1]+b[n]==a[n])ans++; printf("%d\n",ans); return 0; }