APIO2010

APIO2010T1 特别行动队

记 \(dp[i]\) 表示划分前 \(i\) 个时的答案,则有 \(dp[i] = max\{ dp[j] + a(sum[i]-sum[j])^2+b(sum[i]-sum[j])+c\ | 0\le j< i\}\)

若 \(p<q\) ,且满足 \(2a\times sum[i]\times (sum[q]-sum[p])<=(a\times sum[q]^2-b\times sum[q]+dp[q])-(a\times sum[p]^2-b\times sum[p]+dp[p])\) ,则由于 \(a<-1 且 sum[i]<sum[i+1]\) ,所以 \(LHS\) 变小,\(p\) 一定不会比 \(q\) 优,弹出队列。

时间复杂度:\(O(n)\)

APIO2010T2 巡逻

对于一棵树,每条边一定走 \(2\) 遍。

当 \(k=1\) :我们发现把树的直径给连成环以后,减少的贡献最大,答案最小。

当 \(k=2\) :无非找两次直径连成环,但这环可能会重叠,怎么办?

有一个很方便的做法,就是第一次跑完直径后,给直径上的所有边权乘以 \(-1\) ,再跑一次直径。

原理很简单,\(1+(-1)=0\) 。

时间复杂度:\(O(n)\)

APIO2010T3 信号覆盖

题目即求:\(\frac{每种方案被圆覆盖(含边界)的点数}{C_n^3}\)

由于每种方案的三个点必定被覆盖,所以可以变成 \(\frac{每种方案在圆内的点数}{C_n^3}+3\)

转换视角,分子即为无序四元组 \((i,j,k,t)\) 满足 \(t\) 在 \(i,j,k\) 构成的圆内的对数。

题目保证三点不共线,四点不共圆,那么无非就两种情况:四个点形成凹四边形/凸四边形



凹四边形的贡献为 \(1\) ,凸四边形的贡献为 \(2\) (凸多边形的其中一对角和 \(>180°\))

设凹四边形有 \(k\) 个,那么凸四边形有 \(C_n^4-k\) 个,答案为 \(\frac{k+2(C_n^4-k)}{C_n^3}+3\)

瓶颈在于如何求出凹四边形数目,假设凹点为 \(D\) ,那么我们要找出三角形 \(ABC\) 包括 \(D\) 。

正难则反,考虑不包括 \(D\) 。

以 \(D\) 为坐标原点,所有点极角排序,然后用尺取法计算得到第 \(i\)个点最远到第 \(j\) 个点,使两向量夹角 \(<180°\) ,那么在 \((i,j)\) 任意选一个 \(k\) 构成的三角形均不包括 \(D\) 。

数点完拿 \((C_{n-1}^3 - 答案)\) ,即为所有包括 \(D\) 的三角形数了。

时间复杂度:\(O(n^2logn)\)

APIO2012

APIO2012T1 派遣

枚举所有的领导者,在它子树内贪心挑薪水小的人,这样暴力是 \(O(n^2)\) 的。

左偏树 优化一下即可,挺裸的。

时间复杂度:\(O(nlogn)\)

APIO2013

APIO2013T3 出题人

\(1.in-6.in\) 全是卡单源最短路,\(7.in-8.in\) 是神秘程序。

神秘问题:给一张图的每个节点染色,使得任何一条边两端点颜色不同,求最少用多少种不同的颜色

  • 1: ModifiedDijkstra.cpp & FloydWarshall.cpp

卡掉 \(Floyd\) ,直接 \(V=101\) ,无边,\(1\) 组询问即可。

使用次数:\(105,T=107\)

  • 2: FloydWarshall.cpp & OptimizedBellmanFord.cpp

卡掉 \(BellmanFord\) ,不卡 \(Floyd\) ,那么我们令 \(V=100\) ,这样 \(Floyd\) 不会超时。

然后,构造一些 \(j\) 到 \(i\) 边权依次增加 (\(i<j\)) 即可,让 \(BellmanFord\) 跑满 \(V-1\) 次。

使用次数:\(2190,T=2222\)

  • 3: OptimizedBellmanFord.cpp & FloydWarshall.cpp

卡掉 \(Floyd\) ,不卡 \(BellmanFord\) ,那么我们令 \(V=101\) ,无边权,\(1\) 组询问即可。

使用次数:\(105,T=105\) ,卡的真紧...

  • 4: FloydWarshall.cpp & ModifiedDijkstra.cpp

卡掉堆优化的\(dijkstra\) ,我们可以造负权图



我们构造一连串负团(见上图),边权依次倍增,它复杂度就被卡成指数级了。

使用次数:\(151,T=157\)

  • 5: ModifiedDijkstra.cpp & OptimizedBellmanFord.cpp

卡掉 \(BellmanFord\) ,不卡 \(dijkstra\) ,那简单了。

我想办法把 \(BellmanFord\) 的优化给抵消掉,那我建自环卡飞不就得了?

所以令 \(V=300\) ,然后 \(0\) 连向 \(1\) ,边权随意,然后对于 \(i\ge 2\) 建一个负自环,再随机加点边。

查询查 \(10\) 次 \(0\) 到 \(1\) 。

使用次数:\(1016,T=1016\)

  • 6: OptimizedBellmanFord.cpp & ModifiedDijkstra.cpp

卡掉 \(dijkstra\) ,不卡 \(BellmanFord\) ,这和 #4 类似。

疯狂调参卡常即可。

使用次数:\(143,T=143\)

  • 7: Gamble1.cpp & RecursiveBacktracking.cpp

这个Gamble1.cpp是恒过器,所以我们只需要使RecursiveBacktracking.cpp超时即可。

它是个爆搜,所以……我随便造一组大数据就把它卡飞??

使用次数:\(3004,T=3004\)

  • 8: RecursiveBacktracking.cpp & Gamble2.cpp

这个Gamble2.cpp是恒挂器,所以我们只需要使RecursiveBacktracking.cpp跑的出来。

采用黑白染色,然后随便找黑点和白点连边即可,但 \(i\) 和 \(i+1\) 必须连。

使用次数:\(3004,T=3004\)

[汇总] 所有的数据生成器:代码

答案

APIO2019

预计得分:\(100+100+80=280\)

APIO2019T1 奇怪装置

数学题,求个线段交即可。

时间复杂度:\(O(nlogn)\)

APIO2019T2 桥梁

将操作分块,然后用带撤销并查集维护一下即可。

设块长为 \(S\) ,则复杂度为 \(O(Sqlog(n)+\frac{qmlog(m)}{S})\)

在 \(S=\sqrt{m}\) 左右时复杂度最优,为 \(O(q\sqrt{m} logm)\)

UPD: 在洛谷上被硬生生卡常了,完美GG

其实可以再优化(其实是因为洛谷老爷机太慢),把排序用归并实现,块长为 \(\sqrt{\frac{m}{log(n)}}\),可达到 \(O(q\sqrt{mlogm})\)

时间复杂度:\(O(q\sqrt{mlogm})\)

APIO2019T3 路灯

假设 \(i\) 所能到达的最左和最右的位置为 \(l_i\) 和 \(r_i\) 。

考虑一个矩形 \(M_{i,j}\) 表示 \(i\) 可以出发到 \(j\) 的时刻数。

断开:

如果在 \([l,r]\) 区间中,断了 \((x, x+1)\) 这条路,区间变为 \([l,x]\) 和 \([x+1,r]\)

那么在矩形中体现为:子矩形 \([(l,x+1),(x,r)]\) 全体减 \(q - 现在的时刻\)

连接:

如果在 \([l,x],[x+1,r]\) 区间中,连接了 \((x,x+1)\) 这条路,区间合并为 \([l,r]\)

那么在矩形中体现为:子矩形 \([(l,x+1),(x,r)]\) 全体加 \(q - 现在的时刻\)

这里的全体加/减本质为差分思想,连接/断开可以用 \(set\) 维护。

对于查询,本质上就是求前缀矩形 \([(1, 1), (a,b)]\) 的和。

需要注意的是,如果当前 \(a\) 和 \(b\) 连通,则需要给计算的答案减去 \(q - 现在的时刻\)。

树套树即可,我用的是树状数组套动态开点线段树

当然也可以离线跑 \(CDQ\) ,空间会省一点。

时间复杂度:\(O(nlog^2n)\)

APIO刷题的更多相关文章

  1. LeetCode刷题系列

    LeetCode 我们工作面试和提高自身数据结构和算法能力的时候往往需要刷刷题,我选择LeetCode是通过一个留学论坛了解的.专业,覆盖语种全面. 提前说说刷题的心得: 尽量手写代码,少使用IDE的 ...

  2. ife任务刷题总结(一)-css reset与清除浮动

    本文同时发布于本人的个人网站www.yaoxiaowen.com 百度创办的前端技术学院,是一个面向大学生的前端技术学习平台.虽然只有大学生才有资格报名,提交代码进行比赛排名.但是这并不妨碍我们这些初 ...

  3. 刷题ING...

    我用codeVS刷题.. 努力准备!!

  4. XidianOJ 1020 ACMer去刷题吧

    题目描述 刷题是每个ACMer必由之路,已知某oj上有n个题目,第i个题目小X能做对的概率为Pi(0<=Pi<=1,1<=i<=n) 求小X至少做对k道题的概率 输入 第一行输 ...

  5. 【BZOJ-4590】自动刷题机 二分 + 判定

    4590: [Shoi2015]自动刷题机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 156  Solved: 63[Submit][Status ...

  6. NOI题库分治算法刷题记录

    今天晚自习机房刷题,有一道题最终WA掉两组,极其不爽,晚上回家补完作业欣然搞定它,特意来写篇博文来记录下 (最想吐槽的是这个叫做分治的分类,里面的题目真的需要分治吗...) 先来说下分治法 分治法的设 ...

  7. NOI题库刷题日志 (贪心篇题解)

    这段时间在NOI题库上刷了刷题,来写点心得和题解 一.寻找平面上的极大点 2704:寻找平面上的极大点 总时间限制:  1000ms  内存限制:  65536kB 描述 在一个平面上,如果有两个点( ...

  8. 用js刷题的一些坑

    leecode可以用js刷题了,我大js越来越被认可了是吧.但是刷题中会因为忽略js的一些特性掉入坑里.我这里总结一下我掉过的坑. 坑1:js中数组对象是引用对象 js中除了object还有数组对象也 ...

  9. BZOJ4590 自动刷题机

    Description 曾经发明了信号增幅仪的发明家SHTSC又公开了他的新发明:自动刷题机--一种可以自动AC题目的神秘装置.自动 刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写 ...

随机推荐

  1. H5复制粘贴双端适配的解决方案(终极版)

    前言 最终适配所有机型的方案基于clipboardjs官网https://clipboardjs.com/ 这个库由几个不同的CDN提供商托管.选择你最喜欢的:) jsDelivr <scrip ...

  2. 静态变量和成员变量的区别、final修饰特点、创建对象的内存图、静态内存图

    静态变量和成员变量的区别* 静态变量也叫类变量  成员变量也叫对象变量* A:所属不同 * 静态变量属于类,所以也称为为类变量 * 成员变量属于对象,所以也称为实例变量(对象变量)* B:内存中位置不 ...

  3. Servlet学习记录

    个人认为servlet属于一种控制程序,可以处理浏览器的请求并做出对应的回应.我们经常使用的是让一个类去继承HttpServlet,然后在doget或者dopost里面写东西. 目前我个人常在doge ...

  4. OpenHarmony标准设备应用开发(三)——分布式数据管理

    (以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点) 邢碌 上一章,我们通过分布式音乐播放器.分布式炸弹.分布式购物车,带大家讲解了 OpenAtom OpenHarmon ...

  5. 计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统

    系列的上一篇计算机系统4-> 计组与体系结构1 | 基础概念与系统评估,学习了一些计算机的基础概念,将一些基本的计算机组成部分的功能和相互联系了解了一下,其中很重要的一个抽象思想就是软硬件的接口 ...

  6. HTML中的Hack手段之条件注释

    通常WEB的好处就是可以跨平台,但这个世界偏偏有个另类,就是IE浏览器.在平常做HTML设计时,有时需要为IE的表示差异而不得不使用一些Hack手段.条件注释就是这类手段之一. 条件注释是IE浏览器的 ...

  7. Rancher无法登录 容器报错X509:certificate has expired or is not ye valid

    在某天需要发布新版本的时候,发现rancher无法登录,于是到服务器上查看rancher日志,发现以下内容:  参考rancher文档中独立容器Rancher Server证书更新解决 1. 进入容器 ...

  8. 接口测试框架实战(一) | Requests 与接口请求构造

    1080×388 33.4 KB Requests 是一个优雅而简单的 Python HTTP 库,其实 Python 内置了用于访问网络的资源模块,比如urllib,但是它远不如 Requests ...

  9. Redis6通信协议升级至RESP3,一口气看完13种新数据类型

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 在前面的文章 Redis:我是如何与客户端进行通信的 中,我们介绍过RESP V2版本协议的规范,RESP的全程是Redis Serializa ...

  10. python基础-基本数据类型(三)

    一.散列类型 散列类型用来表示无序的集合类型 1.集合(set) Python中的集合与数学符号中的集合类似,都是用来表示无序不重复元素的集合. 1.1 集合的定义 集合使用一对{}来进行定义,集合中 ...