【技巧总结】——关于不知道放到哪里的小技巧

  • 折半搜索
  • 分治
  • 0,1,-1转化
  • 模型转换
    • [ExtendingSetofPointsExtending\;Set\;of\;PointsExtendingSetofPoints](http://172.20.0.190/homework/928/problem/3031)
    • 摆棋子
    • 图腾
    • [DZYLovesChineseIIDZY \;Loves\; Chinese\; IIDZYLovesChineseII](http://192.168.1.105/homework/1003/problem/4114)
  • 正难则反
  • 对象转化
  • 求x为次大值的最大区间

折半搜索

当看到n非常小的时候,一般是(25~40),想暴力但是会T,这时候就可以想一想是否需要折半搜索

主要步骤有2个:
1.搜前一半,存答案
2.搜后一半,得到的结果和前一半去匹配

一般来说搜索只需要最普通的dfs即可,而存答案多和stl有关

经典例题:
LightswitchesLight\; switchesLightswitches(如果对半分容易T,那么预处理的时候多处理一点,处理20个,剩下在询问的时候处理即可)
Xor−PathsXor-PathsXor−Paths(显然在对角线处分开,这里处理的时候要记一下:当x+y==(n+m)/2+1x+y==(n+m)/2+1x+y==(n+m)/2+1的时候,(x,y)(x,y)(x,y)就是对角线上的点了)
MaximumSubsequenceMaximum \;SubsequenceMaximumSubsequence(首先先把所有数字对m取模,然后求出前一半所有可能的和,后一半所有可能的和,设前一半的一个值为x,则在后一半里找比m-x小的第一个数即可)
LizardEra:BeginningLizard \;Era: BeginningLizardEra:Beginning(枚举每个工作要分给哪些人,并用三进制状压记录方案就ok了,但是注意,在输出方案的时候,有最后一位对应的就是0,所以直接while(x)是不对的,应该给出明确的循环次数)

分治

类似于线段树的操作,处理一个区间的时候,把他分成两部分,每部分再按同样的方式进行处理(但是感觉没啥特征)
OptimalInsertionOptimal\;InsertionOptimalInsertion(首先把b排序,能保证,对于b来说,贡献是0,逆序对最小,接着考虑b插入的顺序,找到b[mid],判断哪里逆序对最少,插进去后,a,b两个区间都被分成了两部分。mid前的数只能再往前面插,这样处理,时间复杂度就变成log了)
TheNumberofSubpermutationsThe\;Number \;of \;SubpermutationsTheNumberofSubpermutations(求排列的个数。可以从整段区间的最大值写起。找到最大值,这个可能的排列的长度就确定了,剩下的就是判断是否合法。当这个最大值处理完之后,剩下的排列都不能包含它了,所以就把区间分成两部分,然后重复操作。)
(但是判断是否合法的过程又很费时间,所以我用一个数组wz,记录有相同的值最靠近它出现的位置,比如1 2 2 1,的数组就是 0 0 2 2。枚举端点,如果wz[r]<l,说明在这一段区间内是没有相同的数字的,又因为我们当前考虑的是这段区间的最大值,所以这段区间内的数都是<=这个数,且不重复的,因此构成了一个排列)这点技巧可以掌握一下

0,1,-1转化

在求方案,可行性,反正就是和取值没有什么太大关系的时候,可以用0,1,-1代替原数,这样处理起来就会非常方便

经典例题:

TelephoneLinesTelephone LinesTelephoneLines(二分+最短路)(判断的时候,可以选取适当的参考,用0,1,-1代替原数,这样就可以用最后求出来的结果O(1)O(1)O(1)判断是否合法了)
例:coexitcoexitcoexit(把0改成-1,进行前缀和操作)
MilkVisitsSMilk Visits SMilkVisitsS(这是一道lca的题,但是也是用01求答案,而且是我根本没看题解,自己码出来的(不容易啊),所以值得放上来)
整理书架(线段树+ -1,1标记)
冒泡排序(和上面竟然是一个思想!考的时候完全想不起来)
【bzoj3697】采药人的路径(把0变成-1,满足阴阳平衡只需要路径和为0就好了)

模型转换

ExtendingSetofPointsExtending\;Set\;of\;PointsExtendingSetofPoints

原题:在一个网格图中,如果(a,b),(a,y),(x,b)存在于集合中,那么(x,y)自动加入,直到加不下去,每次进行加点,删点操作,求每次的集合大小

转化:有两列数,一列为横坐标,一列为从坐标,把(a,b)看成a->b的边,若存在边(a,b),(a,y),(x,b),那么(x,y)自动连边,求总边数。可以发现,每次a向对面连的所有点,都会和b向对面连的所有点连边,设左边总点数为L,右边为R,那么答案就是L*R

摆棋子

原题:n*m的网格上,每个格子只能放一个棋子,有些不能放,每行每列都有一个限制,至少放那么多棋子,求最小需要的棋子数

转化:建立网络流模型
先把问题反转,求最多能省下多少个位置不放棋子,最后减一下即可
将每一行,每一列变成n+m个点,源点向表示行的点连边,容量为(每行空着的数量-需要的棋子数),若点(i,j)能放棋子,那么i向j+n连容量为1的边,列向汇点连边(同行),跑一遍最大流即可

图腾

原题:在 k 维空间中,如果 k+1 个整点 A0,A1,…,Ak 满足:
A0 的每一维坐标都是偶数
对于任意 0≤i<j≤k 都有 Ai 与 Aj 的欧几里得距离为 j−i\sqrt{j-i}j−i​
就称这 k+1 个点构成图腾。
现有 n 个整点 P1,P2,…,Pn ,你希望删去其中一些点使得剩余的点中任何 k+1 个都不构成图腾,问最少删多少点。

转化:建立最小割模型
题目可以发现,在一个图腾内,相邻的两个点一定是k位中只有一位差了1,所以A0一定都是偶数,那么Ak一定都是奇数。
我们对于每一个点,都去找和他只有一位差1的,连一条容量为maxx的边,源点向符合起点条件的连容量为maxx边,符合终点条件的向汇点连容量为maxx边,而对于每一个点,我们进行拆点,中间流量为1,表示切断这条边的代价是1,其实也就相当于删了这个点,然后求最小割就行了

DZYLovesChineseIIDZY \;Loves\; Chinese\; IIDZYLovesChineseII

原题:给一个图,每次删k条边(每次询问独立),问删完之后是否联通

转化:利用线性基性质解答
先随便找出一棵树,给树边赋上随机权值(随机的时候尽量大),然后非树边的权值等于两端点树上权值的异或和,把删除的边的权值尝试插入线性基,如果失败,表示把这个环都删了,那么就不连通了

正难则反

经典例题:
FarmUpdatesGFarm\; Updates\;GFarmUpdatesG(正着做是把连通块断开,反着就变成不断合并联通块了,并查集的操作)
旅行路线(将图反过来就变成一棵树了)

对象转化

将计算有多少个,转化成当前这个对总答案的贡献是多少
经典例题:
matrixmatrixmatrix

求x为次大值的最大区间

这样的最大区间有两个,一个是(左边第二个大于它的,右边第一个大于它的),另一个是(左边第一个大于它的,右边第二个大于它的),两个都是开区间。
此时可以用链表来解决,用per,nxtper,nxtper,nxt表示左边第一个比他大的位置,右边第一个比他大的位置,刚开始赋成i−1,i+1i-1,i+1i−1,i+1,然后把值排个序,按照顺序删除元素,同时查找,那么比它小的数都被删了,pre,nxtpre,nxtpre,nxt自然会进行一些移动得到的这个结果就是要找的了,这么说可能有些模糊,意会一下
经典例题:
AloAloAlo

【技巧总结】——关于不知道放到哪里的小技巧相关推荐

  1. 计算机二级判断题技巧一半对一半错,计算机二级小技巧

    还有一个星期左右的时间计算机二级考试就要来了,小编今天给大家整理了计算机二级小技巧,下面就一起来了解看看吧! 选择题 选择题为单选题,是客观性试题,每道题的分值为2分,试题覆盖面广,一般情况下考生不可 ...

  2. 小米计算机使用技巧,小米手机的这五个小技巧,好用到暴风哭泣!

    原标题:小米手机的这五个小技巧,好用到暴风哭泣! 这两年,国产手机可以说是各放异彩,每个品牌的手机,都有不一样的特色,有的是系统流畅,有的是小功能贴心人性. 比如,华为手机的[智能识物]功能,当你不知 ...

  3. 敲代码括号技巧_阅码神奇Souceinsight使用小技巧总结

    /****与SI的初遇****/ 对于大部分人第一次使用SI来说应该是对原IDE集成开发环境有很大的抱怨吧,确实我也一样,对于做嵌入式开发使用各种集成开发工具,比如说Keil,IAR等等,可能还有更加 ...

  4. 网络技巧:分享几个路由器设置小技巧,总有用得到的一天!

    路由器是连接因特网中各局域网.广域网的设备.路由器的作用是用于连接不同的网络,同时选择信息传送的线路,从而实现各局域网内的设备共享网络,使其可以同时访问互联网. 分享几个路由器设置小技巧,总有用得到的 ...

  5. 手机技巧:苹果手机这8个实用小技巧

    今天给大家大家分享苹果手机8个实用小技巧,你都会用吗? 1.快速搜索相机照片 相信大家的相册里的照片应该和我一样不说有几千张,几百张总是有的,有时候想找照片,又不想一张一张找怎么办?很简单,iPhon ...

  6. 宝洁网测管道题技巧_宝洁笔试网测小技巧分享

    这里主要说三大部分,算术题.管道题和记忆题. ①算术题(digitChallenge): 所需资料:三乘表必备!!没有可以私聊我拿 注意事项:所填数字不能重复!拿真题练一下速度,清楚自己的强弱项.对我 ...

  7. 【3D建模制作技巧分享】zbrush贴图映射小技巧

    zbrush贴图映射是zbrush学习中需要知道的知识点,下面为大家分享zbrush贴图映射的小技巧. Zbrush贴图映射 1.在软件右上角点击Tool-loadTool,导入模型. 2.点击工具箱 ...

  8. 抖音的运营技巧是什么?分享5个小技巧

    抖音是7分内容,3分技巧.虽然更加注重的是内容,但技巧同样是十分的重要,很多人不是因为作品内容不好,可能就是差一点运营技巧.所以今天就分享5个技巧给大家! 一.领域垂直. 坚持在自己所选领域框架内进行 ...

  9. github高级搜索技巧_分享 | 一些 GitHub 的使用小技巧

    点击上方蓝字设为星标 每周一.三.五上午 8:30 准时推送 下面开始今天的学习- 作为程序员而言,GitHub 的使用频率可能并不亚于 Google.对于 Google 我们知道一些高级搜索(比如要 ...

最新文章

  1. chsop 兼容jquery(解决与transport.js冲突)
  2. 怎样成为一个高手观后感
  3. 获取一个窗口的所有子窗口(包括嵌套) - 回复 asian 的问题
  4. node.js安装部署测试
  5. 用Vue.js开发微信小程序:开源框架mpvue解析
  6. dedeCMS如何进行关键词过滤替换和屏蔽非法词汇?
  7. 利用分析函数改写范围判断自关联查询
  8. 在Android中利用iText生成PDF
  9. linux内核 image,linux内核zImage详解
  10. 关于vc6++编译DDK驱动出现的问题fatal error C1083: Cannot open include file: 'specstrings.h': No such file or dir
  11. 除了UL认证,开拓美国市场必备认证有哪些?
  12. 开课吧 python与人工智能 下载_开课吧app|开课吧手机版下载v2.3.6安卓版 - 欧普软件下载...
  13. C语言 memcpy和memcpy_s
  14. linux软路由关闭超线程,结论 - Linux 软路由性能测试及分析[图文]_Linux教程_Linux公社-Linux系统门户网站...
  15. 配置web服务器 并运行,二、HelloTomcat(Web服务器配置)
  16. 最新基于ThinkPHP5.0+BootStrap框架开发的自适应WAP手机端响应式界面博客系统PHP源码
  17. Linux中的timedatectl时间设置及ntp时间同步服务搭建
  18. JAVA基础九 数字与字符串
  19. 【转】Numpy 数学函数及代数运算
  20. 拉格朗日乘子库恩塔克条件

热门文章

  1. 软件测试oracle项目,软件测试项目案例.doc
  2. 论近代商人宗族与宗族文化的发展演变
  3. WEGAME更新游戏显示连接服务器失败,wegame更新失败怎么办?腾讯wegame更新失败的解决方法...
  4. 教室预约微信小程序,教室预约小程序,教室预约系统小程序毕业设计作品
  5. iphone保存html视频格式,iPhone6支持什么视频格式?iPhone6支持RMVB播放吗?
  6. 基于JAVA婚纱租赁系统 (Springboot框架) 开题报告
  7. 使用Intellij IDEA创建XML文件, DTD文件和XML Schema文件
  8. Unresolved reference ‘matplotlib‘解决方法
  9. 2011计算机考研院校排名:软件工程(给考研的同学一个参考)
  10. python面向对象实例王者荣耀_Python设计王者荣耀人物结构(63)*