zoukankan      html  css  js  c++  java
  • Luogu P2327 [SCOI2005]扫雷【递推/数学】By cellur925

    题目传送门

    推了好久啊。看来以后要多玩扫雷了qwq.

    其实本题只有三种答案:0、1、2.

    对于所有第一列,只要第一个数和第二个数确定后,其实整个数列就确定了,我们可以通过这个递推式得出

    1     sec[i-1]=fir[i]+fir[i-2]+fir[i-1]

    所以我们可以枚举每列的第1/2个数。

    如果推到第n+1个数还存在,那么指定这种情况不成立。

    Code

     1 #include<cstdio>
     2 #include<algorithm>
     3 #include<cstring>
     4 #define maxn 10090
     5 
     6 using namespace std;
     7 
     8 int n,ans;
     9 int fir[maxn],sec[maxn];
    10 
    11 bool check()
    12 {
    13     for(int i=3;i<=n+1;i++)
    14         fir[i]=sec[i-1]-fir[i-2]-fir[i-1];
    15     if(fir[n+1]) return false;
    16     return true;
    17 }
    18 
    19 int main()
    20 {
    21     scanf("%d",&n);
    22     for(int i=1;i<=n;i++) scanf("%d",&sec[i]);
    23     for(int k=0;k<=sec[1];k++)
    24     {
    25         memset(fir,0,sizeof(fir));
    26         fir[1]=k;
    27         fir[2]=sec[1]-k;
    28         if(check()) ans++;
    29     }
    30     printf("%d",ans);
    31     return 0;
    32 }
    View Code
  • 相关阅读:
    3D照片放大展示窗口
    [NOI2015]品酒大会
    [SDOI2016]排列计数
    [SCOI2008]奖励关
    HDU4336 Card Collector
    CF540D Bad Luck Island
    [NOI2016]网格
    HDU3076 ssworld VS DDD
    [USACO10HOL]赶小猪
    CF113D Museum
  • 原文地址:https://www.cnblogs.com/nopartyfoucaodong/p/9534687.html
Copyright © 2011-2022 走看看