小南量来了,大家快跑啊!!!!!!!!!!

D - Kontrwywiad

这个题很简单。

E - Dwukolorowe drzewo

这个题我不会。

F - Prognoza pogody

这个题把 \(p\) 串复制一遍,原问题就变成了找一个 \((i,j)\) 使得 \(\text{diff}(p_{[i,i+m-1]},t_{[j,j+m-1]})\) 最小。我们枚举一个 \((i',j')\),一旦它们不同,那么 \((i,j)\)\(\text{diff}\) 都会加一,其中 \(i=i'-d+1,j=j'-d+1,d\in[1,m]\)。直接前缀和就做完了。

我的笔漏墨了,我手上全部都是墨水。
我现在很生气。

小丑都会做的问题。

给定 \(n\) 个区间 \([l_i,r_i]\),给定 \(Q\) 个询问 \([L_j,R_j]\),每次询问编号在 \([L_j,R_j]\) 范围内的区间并集长度是多少。可以离线。

对于一个 \(x\) 来说,它被询问 \([L,R]\) 覆盖,当且仅当 \(g_R(x)\geq L\)。其中,\(g_R(x)\) 代表,只考虑编号 \(\leq R\) 的区间时,覆盖 \(x\) 的编号最大的区间编号是多少。可以扫描线,按编号从小到大加入区间,每次将 \([l_i,r_i]\) 覆盖成 \(i\)。查询就是查询线段树(显然要用线段树)上 \(\geq L\) 的位置有多少个。发现要用吉司机线段树。

我们尝试对于 \(L\) 也离线!!!使用数颜色段的方法。用 set 维护连续段和其出现的最后时间。

F - 健身房 / Siłownia

我能战胜过去的我吗?

假如只有一种器材,我们有一种简单的贪心:把区间按右端点从小到大排序,然后每个区间尽量选左端点,已经被选了就向右跳,可以用线段树维护。

现在有若干种器材,从左往右扫的同时,我们必须让每个人选择的时间尽可能晚,好让他和其他人的时间叠在一起。一旦有一个人这个时间再往后就不行了,就把他从 set 里取出来,把这个时间分配给他,然后删掉他和其它器材 set 里的分别的最晚时间最早的人。

于是,我们可以使用和刚刚相反的方向,预处理出每个人最晚用器材的时间。然而,一个人可能会在他的最晚时间前,因某个时间有人用了其它器材而被删掉,这只会让没被删掉的人的最晚用器材时间更晚。这是否有点难办呢?

其实不然。因为一个人一旦因为这种方式被删掉,那么他一定是他所属 set 里最晚时间最早的,他的删除不会影响任何人。

于是貌似就没问题了。时间复杂度 \(O(n\log V)\)。空间复杂度 \(O(n\log V)\)

UPD:一发过了。但是跑到了最优解倒数第一页。我真是天才!!!

ALL OVER THE WORLD

DATA STRUCTURE

CIRNO

Cirno's Ad-hoc.

F - Cirno's Loops

观察,观察,观察。
把每一行都往右连,发现可以这样构造:

至于为什么不会成环,我完全不会证明。
这很显然,这很显然。
如果不考虑正沙漏的斜着的边,每条行间的边都是在向右的边之间加一条向右的边,显然不会成环。
考虑了正沙漏的斜着的边,那么也不可能成环。假如成环了,可以把这种斜边下放成两条直角边,于是矛盾了。
时间复杂度 \(O(n^2)\)


Cirno 告诉 Daichan,她不想当 Adhoc-Master。
Daichan 说:

“不行。Cirno。不行。冰之妖精天生就是要当 Adhoc-Master 的。

Cirno 很难过。


D - Cirno's Life Lies in Movement

观察,观察,观察。
条件 \(\frac{1}{n}\sum\limits_{x=1}^n f(x,u,v)\geq \frac{1}{2}\text{dis}(u,v)+k\)
即为 \(2\sum\limits_{x=1}^n f(x,u,v)-n\text{dis}(u,v)\geq 2nk\)

观察,观察,观察。

\(n\text{dis}(u,v)=\sum\limits_{x=1}^n f(x,u,v)+f(x,v,u)\)

所以条件即为 \(\sum\limits_{x=1}^n f(x,u,v)-f(x,v,u)\geq 2nk\)

观察,观察,观察。

\(\begin{aligned}f(x,u,v)-f(x,v,u) &=\text{dis}(y,v)-\text{dis}(y,u)\\&=(\text{dis}(x,y)+\text{dis}(y,v))-(\text{dis}(x,y)-\text{dis}(y,u))\\&=\text{dis}(x,v)-\text{dis}(x,u)\end{aligned}\)

所以条件变为 \(\sum\limits_{x=1}^n \text{dis}(x,v)-\text{dis}(x,u)\geq 2nk\)

处理出 \(h(u)=\sum\limits_{x=1}^n \text{dis}(x,u)\) 后就可以随便做了。

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


Cirno 找到了钕铜乡第一巫女 Reimu。Cirno 问 Reimu,怎样才能成为 Adhoc-Master。
Reimu 思考了很久:

“你在神社里给我当一个夏天的制冷器,我就告诉你答案。”

Cirno 最后还是答应了。可怜的蓝发小女孩。


C(irno) - 砍树 / Stablo

我会 AdAd-hoc-hoc 做法了。


Cirno 离开神社的时候,已经快要化成一滩水了。
她只记得 Reimu 指导了她:

“Ad-hoc 题就要用 Ad-hoc 的方法来做。”

于是她就学会了 AdAd-hoc-hoc 做法。


B - Cirno's BOI acronym

先询问找到最小的 \(r\),满足 \(M_{1,r} = M_{1,n}\)。此时 \(r\) 一定对应着最后一个 \(\texttt{B}\)
再询问找到最大的 \(l\),满足 \(M_{l,n} = M_{1,n}\)。此时 \(l\) 一定对应着第一个 \(\texttt{B}\)

尝试在 \([l,r]\) 中找到所有的 \(\texttt{B}\)。如何 check \(S_i\) 是否为 \(\texttt{B}\) 呢?
假如 \([l,i-1]\) 中,\(\texttt{B}\) 是出现次数严格最多的字符,那么我们能轻松查出 \(S_i\) 是否为 \(\texttt{B}\)。这个怎么看呢。因为我们已经知道了 \(S_l\)\(\texttt{B}\)。所以直接就能看出来。

现在,\([l,i-1]\)\([i+1,r]\) 中出现次数严格最多的字符都不为 \(\texttt{B}\)。如果此时 \([l,i]\)\([i,r]\) 严格为 \(\texttt{B}\) 了,也可以知道答案。否则我们能知道 \([l,i]\)\([i,r]\) 也不严格为 \(\texttt{B}\)。于是考虑 \([l+1,i],[i+1,r-1]\) 两个区间。这两个区间里出现次数最多的字符一定只有一个,并且不是 \(\texttt{B}\)。而且这两个字符还不一样。通过反证可以证明。于是,我们就可以直接 check \(S_i\) 是否是 \(\texttt{O}\) 或者是否是 \(\texttt{I}\)(虽然不能确定具体是哪个,但是至少能知道它是不是属于 \(\{\texttt{O},\texttt{I}\}\),从而知道它是否为 \(\texttt{B}\)。然后就做完了。不算读入时间复杂度 \(O(n)\)。算读入时间复杂度 \(O(n^2)\)


成为了 AdAd-hoc-hoc-Master 的冰之妖精 Cirno,在 Yukari 的帮助下,决定向冰之机器人(存疑)The Defect 发起 Ad-hoc 挑战。冰雪聪明的她很快就打败了 The Defect。The Defect 在失败之际,留下了一句话:

[随机错乱的语句]

Cirno 回到钕铜乡后,问 Kawashiro Nitori 这是什么意思。她说是"TIME LIMITED EXCEEDED" 的意思。


A - Cirno's 少年游

如果序列全非负,那么在知道和的情况下,我们可以使用 \(n-1\) 次操作还原整个序列。
除此之外,这个操作也太强了。它能搞乱的东西太多了,以至于操作一个很长的区间根本带来不了什么信息。(除非操作的是一整个序列。)
那就先来想想操作单个数有什么用吧。我们从左到右依次操作 \([i,i]\),若操作完后的答案比操作前大了的话,就说明 \(a_i\) 操作前一定是个负数,并且操作后的它还一定在此时序列的最大子段和内。(有可能不是唯一的,但一定所有的最大子段和区间都包含它。这就够了。)
知道了这个一定在最大子段和里的负数,并且它现在已经变成正数了,我们可以做很多事情。从它开始往两边扩展着翻数字,如果把负的翻成正的,最大子段和一定会增大,否则就不变甚至减小。这样,我们就能知道每个数的正负号,从而把它们都翻成正的,然后像我们刚开始提到的那样,用 \(n-1\) 次操作还原整个序列就行了。
但是这样操作次数太多了。我们可以在试图翻 \(i+1\) 时就把 \(i\) 翻回来,如果 \(i\) 此时是负的的话。因此,我们可以假设 \([id,i]\) 下标范围里的数都是全正的,其中 \(id\) 为我们之前找到的那个负数对应的下标,从而比较和是否增大比较的其实是和相较于和的最大值是否增大。当然,这里指的是向右扩展时的例子,向左扩展也是一样的。这个是很好实现的,每个数会有 \(1\) 次操作,但 \(id\) 在这里不需要操作,不过 \(1\)\(n\) 都各自需要额外的一次操作,如果它们需要翻回来的话。因此这部分操作次数是 \(n+1\)
找负数是 \(n\)。最后是 \(n-1\) 次。最开始找和还要 \(2\) 次操作。总共要 \(3n+2\) 次操作。不过分析一下可以发现找负数和扩张不可能同时卡满,于是总共最多只需要 \(3n+1\) 次操作。

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


打败了 The Defect 过后,Cirno 已经成为了全钕铜乡最强的 Adhoc-Master。所以钕铜乡的大家一起在博丽神社里包寿司了。
(完)
但是这里还要加一个

这个东西才行。


Now Playing...

钕铜乡第一 MC Cirno,正式出道!!!
(硬铝是一个铝铜合金。)

MC

\(n\leq 12,m\leq 160\)。考虑插头 DP/连通性 DP/轮廓线 DP。
并查集记录连通性,如果是 \(0\) 就记录 \(0\)。使用最小表示法后,大概是一个贝尔数的量级。
如何计算岩浆湖数量呢?考虑平面图欧拉定理,即 \(|V|-|E|+F=2\)。我们把 \(1\) 看作点,八连通的点互相连边,这个图的面数 \(-1\) 就是岩浆湖数。(好像平面图欧拉定理只能在连通图上用,感觉有一点点搞。)

然而,这个图上可能出现 \(K_3\)\(K_3\) 不是岩浆湖。所以 \(ans=F-1=1-|V|+|E|-\#K_3\)
然而,这个图上可能出现 \(K_4\)\(K_4\) 会让这个图不再是平面图。考虑所有 \(K_4\) 删去一条边,得到的这个图是满足上面这个条件的,直接代下来:
\(ans=1-|V|+(|E|-\#K_4)-(\#K_3-2\#K_4)\)
因此 \(ans=1-|V|+|E|-\#K_3+\#K_4\)

后面的就比较套路了。不过有点难写。待补。

Adhoc-Master Cirno 提出了这样一个 Adhoc-Problem:
一辆空巴士到站停车了。上去了一个博丽灵梦,上去了一个琪露诺,上去了一个魂魄妖梦,上去了一个八云紫。请问巴士上现在有几个人?
她还说第一个解答出这个问题的人会获得 \(0\) 亿日元。

oper

考虑单个 \(k\) 怎么做。对于一个数列 \(a\),定义函数 \(f(a)\) 代表从全 \(0\) 序列开始,每次选择一个区间 \(+1\),加到 \(a\) 的最小操作次数。而单个 \(k\) 就相当于,需要找到一个序列 \(b_i\),满足 \(b_i\geq a_i\)\(b_i\equiv a_i \pmod{Len}\),使得 \(f(b)\) 最小。

有结论:设 \(b_0=0\),有 \(f(b)=\sum\limits_{i=1}^n \max(b_i-b_{i-1},0)\)
有结论:设 \(b_0=0,b_{n+1}=0\),有 \(f(b)=\frac{1}{2}\sum\limits_{i=0}^n |b_i-b_{i+1}|\)

我们直接使用!!!上面的结论!!!
来来来,我告诉你怎么做。显然,\(b_{i+1}<b_i+Len\)。因为一旦 \(b_{i+1}\geq b_i+Len\),我把 \(b_{i+1}\) 减掉 \(Len\) 一定不劣。于是,我们直接去考虑!!!题解里面的做法!!!

\(e_i=\frac{b_i-a_i}{Len}\)

  • \(a_i\leq a_{i+1}\)
    因为 \(b\) 还有下界,所以要么 \(e_{i+1}=e_i\),要么 \(e_{i+1}=e_i-1\)。第一种代价就是 \(a_{i+1}-a_i\),第二种代价是 \(0\)

  • \(a_i>a_{i+1}\)
    要么 \(e_{i+1}=e_i\),要么 \(e_{i+1}=e_i+1\)。第一种代价就是 \(0\),第二种代价是 \(a_{i+1}-a_i+n\)

显然,问题可以变成一个关于 \(e\) 的问题。而上述抉择主要与 \(e\) 的差分有关。虽然有 \(-1\)\(+1\),但我们不能乱选。我们必须要让 \(e_i\geq0\)。所以这个差分的前缀和必须 \(\geq0\)。是这貌似是一个括号序列问题。

  • \(a_i\leq a_{i+1}\)
    这是一个右括号。
    • \(e_{i+1}=e_i\)
      此时认为它不选。最开始加上 \(a_{i+1}-a_i\)
    • \(e_{i+1}=e_i-1\)
      一个右括号。选了。权值为 \(-(a_{i+1}-a_i)\)
  • \(a_i>a_{i+1}\)
    这是一个左括号。
    • \(e_{i+1}=e_i\)
      此时认为它不选。最开始加上 \(0\)
    • \(e_{i+1}=e_i+1\)
      一个左括号。选了。权值为 \(a_{i+1}-a_i+n\)

原问题变成了这样一个问题:一个长度为 \(n\) 的括号序列,要选一个它的子序列,满足这个子序列是一个合法括号序列的前缀,且权值最小。求最小权值。右括号权值都 \(\leq0\),左括号权值都 \(\geq0\)

单个 \(k\) 是很好做的。可以模拟!!!费用流!!!这非常的显然!!!
直接用以跟对22222就走万为了。

观察修改操作。每次都将 \(a_i + 1\) 之类的。发现对括号序列的修改就只是翻转了单个括号和其权值,并且这样的修改只有 \(n\) 个。

我没有得失语症!

H - 拜神

posted @ 2026-03-19 16:19  Just_int_mian  阅读(175)  评论(4)    收藏  举报