首页 > 其他分享 >构造、交互题技巧学习小记

构造、交互题技巧学习小记

时间:2023-07-23 11:22:16浏览次数:41  
标签:frac 技巧 抽屉 DFS 构造 权值 例题 交互 小记

(本文仅包含技巧和例题,无题目解析)

抽屉原理

抽屉原理通常的表述时,将 \(n\) 个物品放入 \(k\) 个抽屉,则其中必有一个抽屉包含至少 \(\lceil\frac nk\rceil\) 个物品也一定有一个抽屉包含至多 \(\lfloor\frac nk\rfloor\) 个物品。

在一些构造题中,经常会要求构造一个权值至多(少)为某个数的方案。这时候可以考虑找出若干个可行的方案使他们的权值之和为定值。假设找出了 \(k\) 个可行的方案,总权值和为 \(n\),根据抽屉原理,其中最小权值一定不超过 \(\lfloor\frac nk\rfloor\),最大权值一定不少于 \(\lceil\frac nk\rceil\)。

很多时候其实是找到一些方案使每个单位(比如点/格子/物品等)的贡献次数相同,比如每个点只被一个方案包含。

方案数可以观察题面要求的分母,比如要求操作数不超过 \(\lceil\frac n3\rceil\) 次,那么可能就需要找出 \(3\) 种或 \(6\) 种方案。

例题

CF1534D Lost Tree

Errich-Tac-Toe (Hard Version)

gym102900B Mine Sweeper II

递归、归纳法

在一些构造题中,对于不同的输入,问题的结构有很大的相似性。在很多时候,这往往意味着我们的构造也具有很大的相似性,或是具有周期性。这时往往可以通过递归的方式,对子问题进行构造,并在子问题的构造的基础上进行一些小的调整,来得到原问题的构造。

本质都是通过证明 / 构造更小范围内有解,边界有解,并且可以通过操作将问题转化为更小范围进行构造。

需要注意的时转化为更小的数据范围时不能丢掉题目性质。

可以考虑一种满足限制条件的一般情况,以某一种方式(按题目要求)加上一个单位(点、格子、物品等)是否依然满足限制条件。

例题

CF1470D Strange Housing

CF1515F Phoenix and Earthquake

ARC122E Increasing LCMs

P6775 制作菜品

DFS树

在解决一些图上的构造问题时,DFS 树往往有非常大的帮助。

一张图的 DFS 树是在对其进行深度优先遍历时,所形成的树结构。建立了 DFS 树后,图上的边可以分成四类:

  • 树边即每个点到其所有孩子结点的边,也即每个点第一次被访问时经过的边。
  • 前向边是每个点到其后代的边,不包括树边。
  • 后向边是每个点到其祖先的边。
  • 其余边称为横叉边。

其中,前向边、后向边、横叉边统称为非树边。

在构造题中,通常我们用到的是无向图的 DFS 树。如果我们将每条边按照第一次经过时的方向进行定向,则无向图的 DFS 树满足所有非树边都是后向边。这个性质在解题过程中有非常大的作用。

例题

CF1364D Ehab's Last Corollary

P5811 景点划分

比较常见的有 2-SAT,欧拉回路,环,二分图 等性质。

可以将一些数字上的东西转为图上的构造,再利用图的性质证明其合法性,同时通过证明推出一个合法的构造。

个人认为这部分的题需要一些数感。

例题

CF1270G Subset with Zero Sum

CF1404D Game of Pairs

AGC018F Two Trees

交互题

交互的主要目的是获取信息,要尽量最大化获得的信息,并进行区分,同时根据题目性质合理的选择询问。

有关求树的结构的题还有一个技巧,就是可以考虑先问出每个点的深度,当然有时候也可能是其他信息。

例题

UOJ405 组合动作

UOJ165 Flea

P7597 猜树 加强版

标签:frac,技巧,抽屉,DFS,构造,权值,例题,交互,小记
From: https://www.cnblogs.com/dks-and-xiao-yu/p/17574800.html

相关文章

  • java调试技巧
    1.debug断点调试中,查看request中的parameter值一般需要打开request的7-9层才可以找到,(下图已经标上序号)打开第7层找到pathParameter,打开第9层找到parameter的值request->request->request->inputStream->ib->coyoteRequest->parameters->paramHashValues  参考:debug断点调......
  • python函数入参配置的技巧
    如下的代码大家应该都见过:deffunc1(n):ifn<=0:print('请输入一个整数!')func1(int(input()))elifn<=2:return1else:returnfunc1(n-1)+func1(n-2)这个是是一个简单的函数处理,得到斐波那契数列的第N个数的值,这里的入参就......
  • Excel 中的技巧函数
    Excel常用函数公式20例,第7条条件查询,其中第一列为要查询的列,如果不是怎么办?可以参考Excel函数之王,Vlookup到底怎么用?IF({1,0},B:B,A:A)......
  • 欧拉数小记
    模拟赛考到了这个,感觉太厉害啦!来写一点东西,以防自己以后看不懂了。欧拉数:定义一个排列\(p\)的升高为\(\sum\limits_{i=1}^{n-1}[p_i<p_{i+1}]\),那么欧拉数\(\left\langle\begin{matrix}n\\k\end{matrix}\right\rangle\)就代表满足升高为\(k\)的长度为\(n\)的排列的数量......
  • Intellij Idea技巧-1
    快捷键下面这个idea和eclipse快捷键的对比,能帮助eclipse的开发者更快适应idea。很多人对idea的不适应都来自快捷键这一层次的基本操作习惯的不适应,只要过了这一关,就进入了投奔idea的快车道。参考:https://www.catalysts.cc/en/wissenswertes/intellij-idea-and-eclipse-shortcuts/另......
  • JavaScript函数中嵌套函数的使用方法及技巧
     在JavaScript编程中,函数是用来封装可重用代码的一种重要工具。但是,有时候在函数内部需要创建另一个函数来完成一些特定的功能。这种在函数内部定义的函数被称为嵌套函数。本文将讨论JavaScript函数中嵌套函数的使用方法及技巧。1.嵌套函数的定义在JavaScript中,嵌套函数可以......
  • 【pandas小技巧】--读取多个文件
    日常分析数据时,只有单一数据文件的情况其实很少见,更多的情况是,我们从同一个数据来源定期或不定期的采集了很多数据文件;或者从不同的数据源采集多种不同格式的数据文件。在这样的情况下,分析数据之前,需要将不同的数据集合并起来。合并数据一般有两个维度,一是同构的数据集合并后行数......
  • 办公技巧:分享4个图片转Excel的方法,再也不用加班录表格了!
    日常办公当中经常需要把纸质表格转换为电子表格,人为手动编辑录入的效率非常低,这里小编给大家推荐使用图片转Excel的方式来快速操作,省时又省力,这样我们再也不用加班录表格了!一、微信搜一搜微信是大家手机中必备的软件,其中的搜一搜功能,可以帮我们识别图片中的表格,并转换为Excel格式,很......
  • 编码技巧 --- 谨防C#闭包陷阱
    合集-c#基础(6) 1.编码技巧---如何实现字符串运算表达式的计算07-122.编码技巧---同步锁对象的选定07-133.解读---yield关键字07-174.并发编程---信号量线程同步07-185.并发编程---为何要线程池化07-186.编码技巧---谨防闭包陷阱07-19收起 引言先......
  • IDEA代码重构技巧 – 抽取+内联
    IDEA代码重构技巧--抽取+内联1.抽取在做代码重构时,可能发现我们需要将变量,参数做抽取,或者某个方法过长,需要将这个方法中相同逻辑的代码块抽取出一个独立的函数,这时候就需要使用抽取,抽取有三类:抽变量,IDEA快捷键CTRL+ALT+V抽参数,IDEA快捷键CTRL+ALT+P抽函数,IDEA快捷键CTRL+......