• BZOJ1088: [SCOI2005]扫雷Mine


    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1088

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

    题解:水题,发现我们只要知道第一个点就可以推出其他的点,于是我们就可以枚举第一个点,判断可行性。

    代码:

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<cstdio>
     5 #include<cmath>
     6 #define N 10005
     7 using namespace std;
     8 int n,ans;
     9 int a[N],b[N];
    10 int read()
    11 {
    12     int x=0; char ch; bool bo=0;
    13     while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') bo=1;
    14     while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9');
    15     if (bo) return -x; return x;
    16 }
    17 void solve()
    18 {
    19 
    20     b[0]=0; b[1]=1; ans=2;
    21     for (int i=2; i<=n+1; i++) {b[i]=a[i-1]-b[i-1]-b[i-2]; if (b[i]<0||b[i]>2||b[n+1])  {ans--; break;}}
    22     b[0]=0; b[1]=0;
    23     for (int i=2; i<=n+1; i++) {b[i]=a[i-1]-b[i-1]-b[i-2]; if (b[i]<0||b[i]>2||b[n+1]) {ans--; break;}}
    24     printf("%d
    ",ans);
    25 
    26 }
    27 int main()
    28 {
    29     n=read();
    30     for (int i=1; i<=n; i++) a[i]=read();
    31     solve();
    32 }
    View Code
  • 相关阅读:
    总结7.19 laravel验证码
    java学习day74--Redis常用命令
    java学习day74--JT项目12(Redis缓存/spring boot整合redis)
    java学习day73-JT项目11(数据库高可用/读写分离/负载均衡)
    疯狂学java的第27天
    xtrabackup全备+binlog模拟slave恢复到某一时间点-启用GTID
    读写文件
    goroutine、chan、select、互斥、读写互斥
    接口

  • 原文地址:https://www.cnblogs.com/HQHQ/p/5612333.html
Copyright © 2020-2023  润新知