4 对拍杂谈

news/2025/10/4 21:12:08/文章来源:https://www.cnblogs.com/michaele/p/19125935

对拍杂谈

0 前言

关于对拍,一句话描述清楚它的重要性:相当于数学中的验算。

我们oi中不能只凭感觉来判断一个程序的正确性,而要靠对拍来确定程序正确性。

当然,对拍过了也不能说明你的程序就一定正确,毕竟数据是你自己造的,暴力也是你自己写的,如果你没有考虑清楚,那么你的对拍其实是白费力气。

1 对拍的结构

对拍之前,我们要先了解一下对拍的结构。

对拍由以下几个程序构成:正解、暴力、随机数据生成器、拍子

正解就是你写的不确定正确性,但是时空复杂度符合题目要求的预备正解
暴力要特殊说明一下,暴力程序可以很慢,但是一定要保证绝对正确(甚至可以指数复杂度)

拍子就是将几个程序放在一起疯狂运行,然后判断你的正解答案和暴力的答案是否相同,从而达到判断正确性的效果。

2 暴力

先说暴力,刚才提到了暴力要绝对正确,因为如果你的暴力不能保证正确,那你的整个拍子就白写了。

我曾经遇到过一种情况,就是写了拍子,然后暴力程序的核心思路和正解相同,只是改了正解的其中一部分地方,也就相当于这个暴力只检查了改动的一部分的正确性,后来拍了半个小时,都没有问题,交上去 50 。

所以不要贪时间复杂度,怎么正确怎么来,当然如果有一个时间复杂度更优的也能保证绝对正确,那么当然是选更优的。

3 随机数据生成器

这个主要是一些板子,以及一些语法问题。

3.1 随机函数

这里为了保证随机数质量,我使用 mt19937 来生成随机数

mt19937 会返回一个无符号整数,范围是 \(0 \sim 2^{32} - 1\)

mt19937_64 返回一个无符号整形,范围是 \(0 \sim 2^{64} - 1\)

3.2 在一秒内生成多组数据

我们平常使用随机数据种子一般会设为 time0 ,但这样实际上有些缺点,因为如果你快速运行这个程序,就会发现其在一秒内生成的数据是相同的。

什么,你不信?我们写个程序验证一下。

random.cpp

#include <iostream>
#include <algorithm>
#include <random>using namespace std;int main () {mt19937 rng (time (0));cout << rng () << endl;return 0;
}

ts.cpp

#include <iostream>
#include <algorithm>using namespace std;int main () {double st = clock ();while (true) {system ("./random");double now = clock ();if ((now - st) / 1000 > 0.5) break;}cout << (clock () - st) / 1000 << "ms" << endl;return 0;
}

直接看运行 ts.cpp 的结果

image-20251004204526060

现在信了吧,所以如果我们用 time0 做种子,在高速生成随机数据的时候会出现很多随机数据,试想一秒只能跑一组同样的随机数据,效率太低。

怎么解决,我们动态读入种子,保证每次的种子不同,这样就能够保证随机数据的强度。

random.cpp

#include <iostream>
#include <algorithm>
#include <random>using namespace std;// 生成一个无符号整数 0 ~ 2^32 - 1
mt19937 rng;int main () {int sd;freopen ("seed.txt", "r", stdin);cin >> sd;rng.seed (sd);cout << rng () << endl;freopen ("seed.txt", "w", stdout);cout << (int)rng () << endl;return 0;
}

再次运行 ts.cpp ,看看结果

image-20251004210000992

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/927559.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网站美工设计详细步骤珠海市手机网站建设公司

文章目录 435.无重叠区间按右边界排序CPP代码 按左边界排序如何判断相邻区间是否重叠如何判断一下一个区间与当前相邻区间是否重叠总结CPP代码 763.划分字母区间思路伪代码实现CPP代码 56. 合并区间思路CPP代码 435.无重叠区间 力扣题目链接 文章链接&#xff1a;435.无重叠区间…

网站图片要多少像素谷歌官方网站注册

还原某个文件到指定版本 svn export -r 10520 resanaly.lua --force 设置忽略指定后缀文件&#xff0c; 例如忽略 .lc 后缀的文件, -R 是递归文件夹&#xff0c;path 为指定的起始目录 svn propset svn:ignore -R “*.lc” path svn propget svn:ignore -R 查看忽略设置 设置后…

商务网站建设与维护(专21春)深圳装修公司排名前十

总第 114 篇文章&#xff0c;本文大约 1300 字&#xff0c;阅读大约需要 4 分钟这是 2020 年的第一篇月总结&#xff0c;总结的内容和周记差不多&#xff0c;也还是从这几个方面进行总结&#xff1a;工作学习阅读&写作2月计划工作这个月的工作时间大概是2周多一点&#xff…

Matlab R2024b下载及详细安装教程,附永久免费Matlab安装包

一、MATLAB R2024b 下载 在开始安装前,请确保已下载 MATLAB R2024a 安装包,同时,确认计算机满足软件的最低系统要求,以保证安装和运行的流畅性。 夸克网盘:https://pan.quark.cn/s/3598f84971f4 迅雷网盘:https:…

网站做app开发如何用自己电脑做网站服务器吗

目录 类的定义和使用类的定义格式 类的实例化类和对象的说明 this引用this引用的特性 对象的构造及初始化就地初始化构造方法 封装包导入包中的类自定义包 static成员static修饰成员变量static修饰成员方法 代码块代码块概念及分类构造代码块静态代码块 匿名对象 类的定义和使用…

Luogu P1966

题意简化 给定两个数组 \(a,b\),求让 \(\sum{(a_i-b_i)^2}\) 尽可能小所需要的最小交换次数 分析 首先,拆解题目给出的公式(完全平方) \(\sum{(a_i-b_i)^2}=\sum {{a_i}^2+{b_i}^2-2a_ib_i}\) 可以发现,\(\sum{{a…

计算机毕业设计springboot和Vue的在线购物系统 基于SpringBoot与Vue.js的电子商务平台开发 利用SpringBoot和Vue构建的网络购物应用 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

题解:P14036 [PAIO 2025] Rooks

P14036:最短路、单调队列。如果暴力 BFS,枚举每个点之后暴力枚举同行同列的所有点,时间复杂度不会低于 \(O(nm(n+m))\),明显过不去,因此必须要以行和列为单位整体考虑。 由题意,路径上所有单元格的 \(A\) 值单调…

2025/8/26

T2 模板(monica) 这是一道矩阵求逆的题,求矩阵 \(X\) 使得 \(A\times X=B\)。由于 \(A\times A^{-1}=I\),所以 \(X=A^{-1}\times B\) . 所以只需求 \(A^{-1}\),再与 \(B\) 做矩阵乘法并取模就完成了。 代码如下:…

27 考研初试时间大约是什么时候?

考研初试的时间一般都是在每年 12 月的倒数第二个周末,最近几年的情况一直如此。所以,27 考研的时间可能就是 2026 年 12 月 19 日,相比于 26 考研,从初试时间上来看,27 考研又提前了一天:

《C++ STL:vector类(上)》:详解基础使用核心接口及经典算法题 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

伪静态网站入侵浙江江能建设有限公司网站

Azure DevOps Server (原名TFS)是微软公司的软件开发管理平台&#xff0c;也是著名的软件开发过程管理工具&#xff1b;系统中记录了软件开发过程中的需求、问题、缺陷和迭代计划等各种软件开发工作项数据。 对于工作项数据的批量操作(例如新增和编辑)&#xff0c;Excel是一个非…

数据结构 - 跳表 Skip List

跳表(Skip List)是一种用于查找的类似于链表的数据结构,是对有序链表的改进,能够在 \(O(\log{n})\) 时间内完成增加、删除、查找操作。跳表相比于树堆与红黑树,其功能与性能相当,并且跳表的代码长度相较下更短。…

06. 定时器

一、定时器QML 有一个 Timer元素,它允许你在 QML 中设置定时器。这个元素是 Qt Quick 模块的一部分。我们可以通过定时器的 interval 属性设置 定时间隔,通过 running 属性设置 定时器默认是否运行,通过 repeat 属性…

高端集团网站建设公司铭万做的网站怎么样

11.盛最多水的容器 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大水量。 说明&#xff1a;你不能倾…

怎么自己建立网站站长之家seo

前言 Gitee 是一个中国的开源代码托管平台&#xff0c;类似于 GitHub&#xff0c;旨在为开发者提供一个高效、稳定、安全的代码管理和协作开发环境。Gitee 支持 Git 协议&#xff0c;可以托管 Git 仓库&#xff0c;进行版本控制、代码协作、项目管理等操作。 1. Gitee 的主要…

职业学院网站建设网站建设需要哪些资质

这是渲染的数据 这是生成的pdf文件&#xff0c;直接可以打印 需要安装和npm依赖和引入封装的pdf.js文件 npm install --save html2canvas // 页面转图片 npm install jspdf --save // 图片转pdfpdf.js文件 import html2canvas from "html2canvas"; import jsPDF …

没人做网站了吗重庆建设网站哪家专业

ArcGIS软件可以很方便的直接实现度分秒转度、度转度分秒(度分秒→度、度→度分秒)。 文章目录 一、转换预览二、工具介绍三、案例解析一、转换预览 借助ArcGIS快速实现度分秒与度及其他格式的坐标转换,例如:度分秒→度、度→度分秒。 1. 度→度分秒 2. 度分秒→度 转换后…

硬件-电容学习DAY23——电容设计实战指南:从选型到高频应用 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

NOIP之前的复健记录

写一些做题记录,题解和随机话。 这回真是高一零基础学OI/文化课了。CF547B考虑每一个数对答案的贡献。 自然是当这个数 \(a_i\)是所选的区间最小值时对答案有贡献,所以我们找到左边第一个比 \(a_i\) 大的数 \(a_l\) …