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

bzoj 1088: [SCOI2005]扫雷Mine

时间:2019-03-21 21:36:33      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:name   class   using   online   std   www   out   .com   span   

链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1088

思路; 很明显当第一列的第一个和第二个格子的值确定时,后面每个格子的值都是可以确定的。当第二列第一个格子为0或2时,我们都可以确定第一列前两个格子,当第二列第一个格子为1时,会有两种可能,一开始想到这里因为前两个格子确定了后面都是可以确定的值就直接判如果a[1]==2||a[1]==0直接输出1,a[1]==1输出2,但是wa了。。因为虽然之后的格子值是确定的,但是确定的方案未必是对的,我们需要判断下当前方案是否成立

 

实现代码:

#include<bits/stdc++.h>
using namespace std;
const int M = 1e5 + 10;
int f[M],a[M],n;
int solve(){
     for(int i = 2;i < n;i ++){
        if(a[i] < f[i]+f[i-1]) return 0;
        f[i+1] = a[i] - f[i] - f[i-1];
     }
     if(f[n]+f[n-1] != a[n]) return 0;
     return 1;
}

int main()
{
    int x,ans;
    cin>>n;
    for(int i = 1;i <= n;i ++)  cin>>a[i];
    if(a[1] == 0){
        f[1] = 0; f[2] = 0; ans = solve();
    }
    else if(a[1] == 1){
        f[1] = 0; f[2] = 1; ans = solve();
        f[1] = 1; f[2] = 0; ans += solve();
    }
    else {
        f[1] = 1; f[2] = 1; ans = solve();
    }
    cout<<ans<<endl;
}

 

bzoj 1088: [SCOI2005]扫雷Mine

标签:name   class   using   online   std   www   out   .com   span   

原文地址:https://www.cnblogs.com/kls123/p/10574652.html

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