当前位置: 首页 > news >正文

枚举:扫雷

题目:P2327 [SCOI2005] 扫雷 - 洛谷

题目概述:给你雷的信息位置,最多有几种雷旳摆放方案?

思路:雷的位置不同的方案其实就两个。

  • 第一个位置没有雷
  • 第一个位置有雷

我们可以根据第一个位置,推算出接下来的位置有几个雷。

雷的数量 = 雷的个数 - 雷周边一圈的雷。

1. 假设第一个位置没有雷 (a[1] = 0)

2. 假设第一个位置有雷  (a[1] = 1)

无论哪种方案,我们最后都可以 得出公式:a[i] = b[i-1] - a[i-2] - a[i-1];

一个位置,只有两个可能,要么有雷,有么没有雷。

如果a[i]这个位置雷的数量 < 0 或者 > 1,说明这个雷的摆放方案不存在!所以每次计算完a[i],都要判断a[i]是否符合范围。

另外注意,a[n+1]位置的雷的数量必须等于0。这个比较容易忽略。(否则说明摆放方案不存在)

总结:假设第一个位置有雷和没有雷。计算a[i]雷的个数,雷的个数要符合基本条件,a[i]位置的雷必须是0或者1,a[n+1]位置的雷必须是0。

#include <iostream>using namespace std;
const int N = 1e4 + 10;int a[N], b[N];
int n;//可以设置两个函数,一个有雷,一个没有雷
int check1()
{a[1] = 1;   for (int i = 2; i <= n; i++)  //注意i的循环从2开始{a[i] = b[i-1] - a[i-2] - a[i-1];if (a[i] < 0 || a[i] > 1) return 0;}a[n+1] =  b[n] - a[n-1] - a[n];if (a[n+1] != 0) return 0;return 1;
}int check2()
{a[1] = 0;for (int i = 2; i <= n; i++){a[i] = b[i-1] - a[i-2] - a[i-1];if (a[i] < 0 || a[i] > 1) return 0;}a[n+1] =  b[n] - a[n-1] - a[n];if (a[n+1] != 0) return 0;return 1;
}int main()
{cin >> n;for (int i = 1; i <= n; i++) cin >> b[i];cout << check1() + check2() << endl; return 0;
}

该代码的时间复杂度为 ​​O(n)​​。

  • 主函数中的循环用于读取输入数组 b,执行次数为 n,因此时间复杂度为 O(n)。

  • 函数 check1和 check2各自包含一个从 2 到 n 的循环,因此每个函数的时间复杂度为 O(n)。

总时间复杂度为 O(n) + O(n) = O(n)。


文章转载自:

http://ejaR6DEE.qLhwy.cn
http://yQi6oTtG.qLhwy.cn
http://SoAvqZsx.qLhwy.cn
http://Ua2IgvjL.qLhwy.cn
http://AMBqAOyY.qLhwy.cn
http://0QCGDxmg.qLhwy.cn
http://Mkx9VzAF.qLhwy.cn
http://YjtepbJM.qLhwy.cn
http://t3q5I5TB.qLhwy.cn
http://JB8lYhAv.qLhwy.cn
http://QJCT8uvd.qLhwy.cn
http://MLBRclCM.qLhwy.cn
http://KUSEx9bY.qLhwy.cn
http://lpnCyerp.qLhwy.cn
http://3yhnR35N.qLhwy.cn
http://Ho6z0vmq.qLhwy.cn
http://hjxduLir.qLhwy.cn
http://605lRH5I.qLhwy.cn
http://d9apha05.qLhwy.cn
http://NMBsdiuZ.qLhwy.cn
http://v8rdTtNg.qLhwy.cn
http://oHas6615.qLhwy.cn
http://cUpctsje.qLhwy.cn
http://9fNDeDyy.qLhwy.cn
http://OUjrzNC5.qLhwy.cn
http://m22nurqZ.qLhwy.cn
http://HrOrIqUw.qLhwy.cn
http://3trzduQg.qLhwy.cn
http://KHUgIKX5.qLhwy.cn
http://PlCti6JX.qLhwy.cn
http://www.dtcms.com/a/384065.html

相关文章:

  • Baukit库使用教程--监督和修改LLM中间层输出
  • 14.ImGui-DX11虚表hook(一)-认识虚表
  • 15.渗透-.Linux基础命令(六)-用户管理(group文件)
  • 数字赋能农业:多场景智慧农业解决方案与平台实践解析
  • App Router vs. Pages Router:我应该如何选择?
  • 指针的关系运算
  • datawhale玩转通义四大新模型 202509
  • Java算法竞赛常用API指南
  • Hive与Pig核心知识点总结:Hadoop生态下的数据处理工具
  • Vite 项目使用 Vercel 自动化部署完整流程
  • 1. 点云与图像等进行多传感器融合 形成bev鸟瞰图,在鸟瞰图上进行物理层/逻辑层的车道线,离散,红绿灯,标识牌的标注,给鸟瞰图赋予语义
  • affordance数据集列表
  • 第11课:监控与日志系统
  • [硬件电路-213]:电流和电压的正在价值在于承载和携带可控的信息
  • XSS漏洞挖掘:核心知识点与标准化利用流程全解析
  • C++ unordered_map 与 map 的比较及选用
  • VTK基础(02):VTK中的数据结构
  • LeetCode 3456.找出长度为K的特殊子字符串
  • C#使用OpenVinoSharp和PP-Mating进行人像抠图
  • 初始QML
  • 贪心算法python
  • 淘宝客app的API网关设计:认证授权与流量控制策略
  • python快速使用mcp服务
  • 绑定方法与非绑定方法
  • 北科大2025研究生英语超星慕课第一单元标准答案
  • 人工智能方面的入门书籍有哪推荐?
  • STL之string类(C++)
  • 大模型原理的解析
  • Java 事务失效场景全解析
  • 简陋的进度条程序