前言

在繁忙的文化课生活后,我得以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(Pn2​logn)
这样我们发现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\equiv0t1​modB≡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游记题解相关推荐

  1. NOIp 2018 游记+题解

    写在前面 这篇游记被某文科巨佬喷为小学生日记,大家将就看下吧别较真-- 关于我 HB无名小蒟蒻zar. 来自WFLS,高一,老年女选手. 在各大oj上以 渣儿 / juruoZAR / ouaoan ...

  2. APIO2019简要题解

    Luogu P5444 [APIO2019]奇怪装置 看到这种题,我们肯定会想到\((x,y)\)一定有循环 我们要找到循环节的长度 推一下发现\(x\)的循环节长为\(\frac{AB}{B+1}\ ...

  3. NOIP2018游记题解

    Day 0 openday,open了一天.和yx,zyh三杀 晚上到了学军旁边的酒店. 看了一下电视睡觉了. Day 1 早上8点到了考场,唯一的感觉是冷. 8点15分进了考场. 700+台笔记本. ...

  4. NOI 2021 游记题解总结

    文章目录 Travel Notes Day 0 Day 1 Day 3 Day 3.5 Day 10 Solutions D1T1 D1T2 算法一 算法二 Lemma D1T3 算法一 算法二 算法 ...

  5. CSP-S 2022 游记题解

    赛前七日 赛前一个星期住在苏州,10.29 比赛前的星期天还打了 CF 的 Div1. 第一次场切了 Div1.前四道.当时觉得这好像不是状态不错的现象,这可能是要把运气透支的预兆-然后一个星期后的 ...

  6. THUPC2019/CTS2019/APIO2019游记

    Day -? 居然还能报上thupc,我在队里唯一的作用大约是cfrating稍微高点方便过审.另外两位是lz和xyy. Day -2 我夫人生日! Day -1 lz和xyy的家长都来了带我飞.住在 ...

  7. $NOIP 2018 PJ游记[ZJ]$

    众所周知 NOIP = NOI plus. NOIP ZJ-PJ 2018 以下仅为游记 . 题解预留.- >T3 T4 (T1T2太水了不放了) 定位 杭州学军中学紫荆港校区(浙江赛区) da ...

  8. 省选后CTS/APIO前文化课划水记

    目前本文停止更新 目前没有什么明确的目标,所以就叫划水吧. 第一周 4.9 (Tue) 早上 10:00 到学校,然后去仓库找了张桌子,搬到教室,开始自习生活. 拿出"必背古诗文" ...

  9. 【2019CSP-J 普及组题解】数字游戏(number),公交换乘(transfer),纪念品(souvenir),加工领奖(work) CSP普及游记

    文章目录 T1:数字游戏 题目 CODE T2:公交换乘 题目 CODE T3:纪念品 题目 题解 CODE T4:加工领奖 题目 题解 CODE 关于普及组的想法&游记 T1:数字游戏 题目 ...

最新文章

  1. ASP .NET Core使用connection string连接MySQL/MariaDB,并设置UTF-8编码
  2. 【转】Weblogic的集群
  3. Action recognition进展介绍
  4. Linux系统驱动全吗,linux系统需要给硬件安装驱动程序么?谁推荐一下linux系统阿~要驱动最全...
  5. MCMS 基于SpringBoot 2架构
  6. 高质量的设计灵感社区网站
  7. 搜索、推荐、广告中的曝光偏差问题
  8. 一路波折----记我的win10环境下scala安装之路,解决命令窗口报错问题
  9. 科学使用Live2D的方法
  10. scanf和getch函数的区别
  11. 【VISIO安装问题】无法安装64位版本的office,因为在您的PC上找到以下32位程序
  12. log4j2自定义级别日志
  13. override overload
  14. ORCLE导出数据,加不加owner,ORACLE常用的导出语句
  15. 微信群发c语言,微信群群发.py
  16. IDEA将项目打包成jar包
  17. JavaScript 获取当前日期——JS 中的今天日期
  18. 【转载】HBA卡知识介绍
  19. 避开“恐怖谷”,机器人的眼睛应该这样开发…
  20. 扑克牌之斗地主的简单代码

热门文章

  1. 使用Mock方法完成接口测试的方法
  2. 【32单片机学习】(3)霍尔编码器减速直流电机控制及测速
  3. 利用C语言编程反向输出字符串
  4. 【去哪儿】血型遗传检测
  5. 献给阿尔吉侬的花束(信息学奥赛一本通-T1256)
  6. ubuntu python安装pip_在 Ubuntu 上安装 pip的方法
  7. 依协变量(time-dependent covariables) 兼谈分层Cox回归 依时变量
  8. uefi怎么添加linux启动项,linux下添加UEFI启动项
  9. 当你用opnet(riverbed)跑程序时候,出现fatal error c1189: #error:No Target Architecture该怎么处理?
  10. React jsx语法学习