APIO2019游记题解
前言
在繁忙的文化课生活后,我得以have a rest,来到北京参加APIO,然而,这APIO似乎并没有使我感到轻松
比赛历程
其它不说了,讲课听起来挺奇怪的,就直接从比赛写起吧
好久不写博客了,总结一下十分必要,确实应从每一次的比赛中吸取教训
这次比赛,开场写读优,大概好久不写OI题了,所一读输优写挂调了20min
然后感觉linux的编辑器太丑、不好用,又调了10分钟
准备工作做完后,感觉神清气爽,但是意识到时间已经过去了很久
看完3题,决定从T1开始写
第一档暴力直接写完,写第二档暴力的时候卡了好一会儿,因为n=1n=1n=1的时候会RE
然后就去开3,一开始想树套树→\rightarrow→二维线段树→\rightarrow→cdq分治
虽然万年不写,但感觉思路还是在的,于是准备刚一波
200line的代码,调了两个错误,就过T3了
此时的我松了一口气,丝毫没有发现2是一道水题,想都不想就从最低的暴力开始写,以至于推到后面的时候问题已经被我转化的非常复杂,最终只获得了20分,T1多写了一个没有一操作部分分,然后就结束了
最终43+20+100=163,然而其实T2很简单,而3的暴力分有60,所以大众分是43+100+60,被打爆了
事后思考了一下,T1正解无非是最后写的没有二操作的写法套一个分块,T2直接推一个代数的式子就好了(具体的这里暂不贴)
正常比赛的题想到了代码都不是很难,而且思路都想到了
最遗憾的不是不会做,而是与正解擦肩而过
这比赛没发挥好还是有很多因素的:
1.代码能力不佳,对是否写出3不自信,导致写完后就有太大仔细,没再想正解
2.对于linux操作系统的使用不够熟练
3.对题目的发散应用的实际解题的能力不足
感觉过去一年做了很多题,但是在方法上并没有怎么提升,这其实是很有问题的
题解
鉴于主办方要求比赛后2日内不要在网上上传题解,所以此处将在之后进行补充
——2019/5/19
update: 2019/5/20
过了2天了,那应该也可以放题解了
T1
题目大意: 给出一幅图,有两种操作:
一种是改一条边的边权
另一种是询问,从一个点开始,每次经过权值大于等于自己权值的边,求可达点的集合大小
正解:
先考虑没有修改操作,我们发现直接将边和询问的权值分别排序,扫一下当前权值,即维护“经过权值大于等于xxx的边”的联通块,用并查集维护即可
复杂度O(nlogn)\mathcal O(nlogn)O(nlogn)
我们考虑如果有修改操作怎么办
考虑分块(真的只要想到分块就好了)
我们把所有操作分块(设块大小是PPP),对于每个块内的操作单独处理
我们发现对于快外的询问很方便处理,那么我们先把块内操作修改的边删去,扫一遍,我们发现这个扫一遍的复杂度是O(nα)\mathcal O(n\alpha)O(nα)的,那么所有块的复杂度就是O(nPα)\mathcal O(nP\alpha)O(nPα),我们考虑块内有修改的边,我们只要在询问时暴力把那些有修改的边加入即可,我们发现有修改的边最多只有O(nP)\mathcal O(\frac{n}{P})O(Pn)条,由于需要使用并查集,所以总复杂度O(n2Plogn)\mathcal O(\frac{n^2}{P}logn)O(Pn2logn)
这样我们发现P=nlognαP=\sqrt {nlogn\alpha}P=nlognα时总复杂度最低,为O(nnlognα)\mathcal O(n\sqrt{nlogn\alpha})O(nnlognα)
PS:听说本题可以使用路径压缩使得复杂度降为O(nnα)\mathcal O(n\sqrt{n\alpha})O(nnα),但我想了一下好像α\alphaα是均摊的,所以好像不太行,如果有什么高论可以来与我讨论
update by 2019/7/2: 经过yyb的提醒,我发现自己扫一遍的复杂度中的α\alphaα忘记加了,现已更新
T2
题目大意: 对于一个ttt对应一个数对(t+⌊tB⌋mod  A,tmod  B)(t+\left\lfloor\frac tB\right\rfloor\mod A,t\mod B)(t+⌊Bt⌋modA,tmodB),给出nnn组ttt的范围,问对应的数对有多少种
正解:
本题部分分极少,而且比正解着实难写许多,所以这里就不讲了
本题其实是要推一个结论,即如果t1,t2t_1,t_2t1,t2对应的数相同,那么当且仅当t1≡t2(modA∗Bgcd(A,B+1))t_1\equiv t_2\pmod{\frac{A*B}{gcd(A,B+1)}}t1≡t2(modgcd(A,B+1)A∗B)
直接线段求交即可
具体分析是,我们发现它是循环
我们考虑与t=0t=0t=0循环的第一个位置t1t_1t1
t1mod  B≡0t_1\mod B\equiv0t1modB≡0
那么即t1(B+1)Bmod  A≡0\frac{t_1(B+1)}{B}\mod A\equiv 0Bt1(B+1)modA≡0
又要t1t_1t1最小,那么就t1=A∗Bgcd(A,B+1)t_1=\frac{A*B}{gcd(A,B+1)}t1=gcd(A,B+1)A∗B
T3
题目大意:
有一个n+1个点、n条边的链,有两种操作:
改变一条边的状态(黑变白或者白变黑)
询问两个灯a,b之间的边,从开始到现在有多少个时刻边全是白色的
题解:
首先用一个set维护当前的每一段边是白色的连续段,用数据结构维护点对满足条件的时刻数,当有修改操作时直接更新数据结构和set即可
容易想的有树套树、二维线段树
我写的cdq分治+树状数组
本题想到了做法的话剩下的就是靠码力了
复杂度O(nlog2n)\mathcal O(nlog^2n)O(nlog2n)
总结
十年OI一场空(大雾)
以前觉得OI就是一个竞赛,现在发现,OI其实反映出我自身的许多问题
前路漫漫,进无止尽!
APIO2019游记题解相关推荐
- NOIp 2018 游记+题解
写在前面 这篇游记被某文科巨佬喷为小学生日记,大家将就看下吧别较真-- 关于我 HB无名小蒟蒻zar. 来自WFLS,高一,老年女选手. 在各大oj上以 渣儿 / juruoZAR / ouaoan ...
- APIO2019简要题解
Luogu P5444 [APIO2019]奇怪装置 看到这种题,我们肯定会想到\((x,y)\)一定有循环 我们要找到循环节的长度 推一下发现\(x\)的循环节长为\(\frac{AB}{B+1}\ ...
- NOIP2018游记题解
Day 0 openday,open了一天.和yx,zyh三杀 晚上到了学军旁边的酒店. 看了一下电视睡觉了. Day 1 早上8点到了考场,唯一的感觉是冷. 8点15分进了考场. 700+台笔记本. ...
- NOI 2021 游记题解总结
文章目录 Travel Notes Day 0 Day 1 Day 3 Day 3.5 Day 10 Solutions D1T1 D1T2 算法一 算法二 Lemma D1T3 算法一 算法二 算法 ...
- CSP-S 2022 游记题解
赛前七日 赛前一个星期住在苏州,10.29 比赛前的星期天还打了 CF 的 Div1. 第一次场切了 Div1.前四道.当时觉得这好像不是状态不错的现象,这可能是要把运气透支的预兆-然后一个星期后的 ...
- THUPC2019/CTS2019/APIO2019游记
Day -? 居然还能报上thupc,我在队里唯一的作用大约是cfrating稍微高点方便过审.另外两位是lz和xyy. Day -2 我夫人生日! Day -1 lz和xyy的家长都来了带我飞.住在 ...
- $NOIP 2018 PJ游记[ZJ]$
众所周知 NOIP = NOI plus. NOIP ZJ-PJ 2018 以下仅为游记 . 题解预留.- >T3 T4 (T1T2太水了不放了) 定位 杭州学军中学紫荆港校区(浙江赛区) da ...
- 省选后CTS/APIO前文化课划水记
目前本文停止更新 目前没有什么明确的目标,所以就叫划水吧. 第一周 4.9 (Tue) 早上 10:00 到学校,然后去仓库找了张桌子,搬到教室,开始自习生活. 拿出"必背古诗文" ...
- 【2019CSP-J 普及组题解】数字游戏(number),公交换乘(transfer),纪念品(souvenir),加工领奖(work) CSP普及游记
文章目录 T1:数字游戏 题目 CODE T2:公交换乘 题目 CODE T3:纪念品 题目 题解 CODE T4:加工领奖 题目 题解 CODE 关于普及组的想法&游记 T1:数字游戏 题目 ...
最新文章
- ASP .NET Core使用connection string连接MySQL/MariaDB,并设置UTF-8编码
- 【转】Weblogic的集群
- Action recognition进展介绍
- Linux系统驱动全吗,linux系统需要给硬件安装驱动程序么?谁推荐一下linux系统阿~要驱动最全...
- MCMS 基于SpringBoot 2架构
- 高质量的设计灵感社区网站
- 搜索、推荐、广告中的曝光偏差问题
- 一路波折----记我的win10环境下scala安装之路,解决命令窗口报错问题
- 科学使用Live2D的方法
- scanf和getch函数的区别
- 【VISIO安装问题】无法安装64位版本的office,因为在您的PC上找到以下32位程序
- log4j2自定义级别日志
- override overload
- ORCLE导出数据,加不加owner,ORACLE常用的导出语句
- 微信群发c语言,微信群群发.py
- IDEA将项目打包成jar包
- JavaScript 获取当前日期——JS 中的今天日期
- 【转载】HBA卡知识介绍
- 避开“恐怖谷”,机器人的眼睛应该这样开发…
- 扑克牌之斗地主的简单代码
热门文章
- 使用Mock方法完成接口测试的方法
- 【32单片机学习】(3)霍尔编码器减速直流电机控制及测速
- 利用C语言编程反向输出字符串
- 【去哪儿】血型遗传检测
- 献给阿尔吉侬的花束(信息学奥赛一本通-T1256)
- ubuntu python安装pip_在 Ubuntu 上安装 pip的方法
- 依协变量(time-dependent covariables) 兼谈分层Cox回归 依时变量
- uefi怎么添加linux启动项,linux下添加UEFI启动项
- 当你用opnet(riverbed)跑程序时候,出现fatal error c1189: #error:No Target Architecture该怎么处理?
- React jsx语法学习