首页 > 其他分享 >IOI

IOI

时间:2023-01-22 12:55:46浏览次数:65  
标签:le frac log ge 出边 IOI 起点

IOI2022

鲶鱼塘(2)

记第\(i\)列的堤为\([0,l_{i}),\)贡献区间为\([l_{i},r_{i}]\),则限制即\(l_{i}>r_{i}\)或\(r_{i}<\max(l_{i-1},l_{i+1})\)

  • 若\(l_{i}>r_{i}\)或\(r_{i}<l_{i-1}\),即\(r_{i}\)的条件已经满足,仅关心于\(l_{i}\)
  • 若\(l_{i}\le r_{i}\)且\(r_{i}\ge l_{i-1}\),则\(l_{i}<r_{i}<l_{i+1}\le r_{i+1}\),即\(l_{i}\)无贡献,仅关心于\(r_{i}\)

同时,显然可以钦定\((i,l_{i})\)和\((i,r_{i})\)处有鱼或\(l_{i}=n,r_{i}=n-1\)

定义\(f_{i,j,0/1}\)表示前者/后者中\(l_{i}/r_{i}=j\)​的最大答案,转移即

\[\begin{cases}f_{i,n,0}=\max f_{i-1,j,0/1}\\f_{i,j,0}=\max_{j<j'}f_{i-1,j',0}+w_{i}[j,j')\\ f_{i,j,1}=\max\{\max_{j'\le j}f_{i-1,j,0}+w_{i}[0,j]\ ,\ \max_{j'<j}f_{i-1,j',1}+w_{i}(j',j]\}\end{cases} \]

双指针实现即可,时间复杂度为\(O(n+m\log m)\)

囚徒挑战(3)

以二进制按位传递,具体做法如下:

  • 第\(1\)个人询问\(A\),并返回二进制下最高位
  • 第\(2\)个人询问\(B\),判断最高位(是否与\(A\)相同)与并返回二进制下次高位

以此类推,每个人消耗两个数,注意到\(5000<2^{13}\),值域为\(2\times 13=26\)

改为使用三进制,注意到\(5000<3^{8}\),值域为\(3\times 8=24\)

更本质的,可以看作将区间划分为若干段,即\(f(n)=\min_{2\le i\le n}f(\lceil\frac{n}{i}\rceil)+i\)

由于两数不同,在端点处可直接回答,即\(f'(n)=\min_{2\le i\le n}f'(\lceil\frac{n-2}{i}\rceil)+i\)

由于现在的区间划分并不规整,在实现上有一些细节:

  • 每层所分段数需相同,并根据\(x\)判断层数
  • 根据层数奇偶性判断所查询数,并检验最后一步是否与\(x\)相同
  • 若不同即直接回答,否则返回下一步的信息

经计算,值域为\(f'(5000)=20\),一种可行方案为\(2,3,3,3,3,2,2,2\)

无线电信号塔(4)

参考这里

数字电路(3)

从底向上考虑,设节点\(k\)有\(c_{0/1}\)个儿子为\(0/1\),则分别有\(c_{0/1}\)种参数选择为\(0/1\)

注意到这等价于选择\(k\)的一个儿子,将该儿子的权值作为其权值

预处理出每个节点为\(1\)的贡献,即除其到根路径上节点外的儿子个数乘积

(由于模数不为质数,这个过程的实现不能用逆元)

在此基础上,区间翻转显然可以用线段树维护,时间复杂度为\(O(n+m+q\log m)\)

最罕见的昆虫(2)

定义\(f(x)\)表示依次加入\(n\)只昆虫并询问,若结果\(>x\)则取出,最终剩下的昆虫数

注意到\(f(1)\)即昆虫类型数,而答案\(\ge x\)也即等价于\(f(x)=xf(1)\)

二分答案,每次求\(f(x)\)的操作次数为\(n\),总操作次数为\(O(n\log n)\)

设当前二分到的区间为\([l,r]\),并对答案分类讨论:

  • 若答案\(\ge mid\),则不妨保留已经加入机器的昆虫(不取出)
  • 若答案\(<mid\),则不妨删除未被加入机器的昆虫

此时,每种昆虫数量\(\in [l,r+1]\),且其中\(l\)只在机器内,因此操作次数\(\le (r-l+1)f(1)\)

初始取\(l=1,r=\lfloor\frac{n}{f(1)}\rfloor\),则操作次数可以估计为\(n+\frac{n}{2}+\frac{n}{4}+...\le 2n\)

总操作次数约为\(3n\),由于二分最坏是向上取整,需要一定常数优化

千岛(4)

独木舟可以看作将边定向,并在每次经过后反向,要求最终每条边方向不变

在此基础上,考虑以下两种情况:

  • 对于出度为\(0\)的点,到达其后仅能原路返回,不妨删除

  • 若起点出度为\(1\),显然第一步移动唯一,移动后起点出度变为\(0\),仅能从该边返回(并结束)

    换言之,可以将该点删除并将起点移动到出边终点

重复上述过程,若起点被删除则无解,否则对所有点仅保留一条出边

此时构成基环内向树,可以从起点到环绕一圈后返回,但环上的边方向改变

利用起点出度\(\ge 2\),交替选择两条出边各两次即可,路径长度至多为\(8n\)

一个特殊情况时是两条出边相互影响(参考1-02.in),此时仅需做\(3\)轮即可

时间复杂度为\(O(n+m\log m)\)


标签:le,frac,log,ge,出边,IOI,起点
From: https://www.cnblogs.com/PYWBKTDA/p/17064364.html

相关文章

  • IOI 2019 题解
    Day1A排列鞋子从前往后考虑每个位置\(i\),并找到与它匹配的最靠前的元素,将这两个元素放在最靠前的空位置,最后算一下逆序对个数即可。Day1B景点划分假设\(a\leb\le......
  • 【题解】P4899 [IOI2018] werewolf 狼人
    そうやってただ日が暮れるまで語り掛ける本当の言葉题意给定一个有向图和若干询问,每次询问是否存在一条满足条件的路径:端点分别为\(u,v\)前面一段不经过\([1,L......
  • P6751 [IOI2019]视觉程序 题解--zhengjun
    提供一种简介易懂的做法。首先曼哈顿距离的绝对值比较难处理,所以可以转成切比雪夫距离。具体地说,就是\((x,y)\)变成\((x+y,x-y)\)(接下来所述的坐标都是变换后的)。这......
  • [IOI2000]邮局 题解
    简要题意线段上有\(V\)个村庄,现在要建\(P\)个邮局,使每个村庄到最近的邮局的距离之和最小。50分做法设\(dp[i][j]\)表示第一个村庄到第\(i\)个村庄,建了\(j\)个......
  • Linux异步IOio_uring 与 libaio
    我们可以先整体看一下linux的IO模型大体有哪些类型。linux的IO主要可以分为两个大类,而我们今天要介绍的io_uring就属于其中的kernelIO模型中的asyncIO模......
  • [IOI2011]crocodile
    \([IOI2011]crocodile\)这题没有题解,我就来发一篇。链接:https://www.luogu.com.cn/problem/P5845题目描述:给定出发点\(s\)与\(k\)个终点,有一个鳄鱼门卫可以在每一轮堵......
  • [IOI2019]排列鞋子
    $[IOI2019]$排列鞋子链接:https://www.luogu.com.cn/problem/P5749题目描述:将一个序列$A$交换到满足对于任意的$i(1<=i<=n/2)$满足$a_{i}=-a_{i\times2}$且$a_{i}<......
  • 知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2022):基于异构图GCN
    (2022.4.16)Briefings-DTI-HETA:基于异构图GCN和GAT的DTI预测目录(2022.4.16)Briefings-DTI-HETA:基于异构图GCN和GAT的DTI预测摘要1.引言2.模型方法2.1定义3.1......
  • 动态规划- [USACO1.5][IOI1994]数字三角形 Number Triangles
    [USACO1.5][IOI1994]数字三角形NumberTriangles题目描述观察下面的数字金字塔。写一个程序来查找从最高点到底部任意处结束的路径,使路径经过数字的和最大。每一步可以......
  • sandom AK IMO & IOI & IBO & IChO & IPhO
    sandom肽聚辣!!!摸摸摸摸摸摸摸摸摸摸%%%%%%%%%%%%%%......