Loading

noi2023 游记

?~7.1

学考。

7.2

晚上打了把 arc。F 原题过了。找了一整场 E 的规律,最后找出来一个奇怪的东西 /oh。

7.3

联考是我的模拟赛。去武汉。

7.4

早上模拟赛 t1 跑两次 km 没清空,t3 没写完。

晚上感觉很困,想先去开场 div2 练练手。先打开了个 div2 的 f,看了会儿突然发现怎么 d2F=d1D!!于是干脆做这场 div1 了,好像题目都比较简单的样子。

7.5

下午是 isij 杯赛,总共三个题,前两题是我的题。

比赛开始的时候我们都没有拿到能看到题的账号。我觉得这场比赛估计和我没啥关系了就去 vp 上场 div1+2 了。

打了十几分钟突然告诉我有账号了。哦。登一下。t3 怎么是原题啊??不管了不管了。继续 vp。

过玩前面的题后又去看了眼 isij,怎么我的题的时限空限被改了啊??怎么我的部分分表被删了啊??

?????

很火大,告诉金老师让他们改回去。

继续 vp。I 不太会啊,但是根号好像不难。

isij 主办方又和我们说不改???说部分分表是评测内部信息没有必要公开??我还放了一些特殊性质呢???

?????

I 根号写完了。写个对拍拍一拍。

过了拍之后交上去还是 wa 了。

最后在那里瞎改,最后一分钟的时候!终于不 wa 了!但是 TLE 了!!

调了调块长,赛后三分钟过了!!!!!都怪 shaber isij。

最后看了眼 isij 榜,共五个人过 t1,t2 最高分 45,还算比较符合预期。

晚上写了上午口胡的 UOJ632,感觉这题很趣味。

题解

核心结论: 这题构造出来的图是 https://codeforc.es/contest/1792/problem/F2 中所描述的图。

证明可以增量,构造树形结构也可以增量,复杂度 \(\Theta(n^2)\)

7.6

模拟赛 ak 了。

下午我干什么了?好像摆过去了。

晚上做了一下 gym104337G,好题。

题解(另解)

首先这个 \(998244353\)\(8 \times 10^6\) 提醒我们从单位根考虑。我们只询问单位根。

下面记我们要猜的多项式是 \(A(x)\),系数是 \(a_i\)

注意到询问所有 \(\omega_{2^l}^i\) 可以做单位根反演。

因此考虑设计一个函数 \(P = F(2^l)\),做完这个函数后可以得到 \(P_k = \sum_{i=u\times 2^l+k}a_i\)

这个过程事实上是对点值做 IDFT。

我们可以怎么做 IDFT 呢?先算出 \(Q=F(2^{l-1})\)。然后执行 \(A(x)=A(x\omega_{2^l})\),然后算出 \(H=F(2^{l-1})\)

注意到 \(Q_i = P_{i} + P_{i + 2^{l-1}}\)\(H_{i}=(P_i - P_{i+2^{l-1}})\omega_{2^l}^i\),所以可以通过 \(H,Q\) 解出 \(P\)

注意到 \(Q_i = 0\) 时,\(P_i=P_{i+2^{l-1}}=H_i=0\)。而只有 \(1000\)\(Q_i \neq 0\),因此算 \(H\) 的时候,能不能找到一些更快的方法呢?


我们把 \(A\) 中的 \(x\) 乘过 \(\omega\) 的函数分开来,设为 \(G(2^{l-1},w)\),没有乘过的才直接定义成 \(F\)

\(G\) 中,一些位置已经被确定,一些位置还没有被确定。

首先仍然把问题分成两半,\(Q=G(2^{l-1},w),H=G(G,w\omega_{2^{l}})\)

但是这样两边非零项的个数都是原来的数量,非常不牛!

怎么优化呢?

如果 \(G_i,G_{i+2^{l-1}}\) 都不知道,就把 \(Q_i,H_i\) 都标记成不知道。

如果都知道,那么就可以算出 \(Q_i,H_i\)

如果有一个不知道,那么算出 \(Q_i\) 后可以直接算出 \(G_{i},G_{i+2^{l-1}}\) 的值,因此 \(H_i\) 也知道了。

注意到这样,\(Q,H\) 中不知道的个数恰好就是 \(G\) 中不知道的个数,所以我们递归到 \(l=0\) 的时候不知道的数量仍然一样,所以就做完了!!

7.7

上午打模拟赛,后面忘了。

7.8

早上听讲课。

下午看课件。

晚上口胡了一下 UOJ783 的 subtask2。subtask1 好像当时会做就不看了。

题解

UPD : 这个做法好像有点问题,大概只能做到 \(n^{5/3}\).

  • 对座位分块。块 \([l,r]\) 满足以下两个条件之一:
    • \(l=r\)
    • \(\sum_{i=l}^{r} (cnt_i+1) \le B\)。其中 \(cnt\) 是包含 \(i\) 的操作个数。

第一种特判。第二种考虑只有 \(B\) 个操作,记录 \(F[l,l']\) 表示操作是从 \(l\) 开始的,如果现在从 \(l'\) 操作开始走,走到什么时候能走完这一段值。

再对位置继续进行分治算出 \(F\) 即可。复杂度单根号。

7.9

早上我们讲课。

下午打锣鼓的原神场,怎么有信息压缩提阿??

晚上打 arc,想到了做法但是以为是错的。被打包了。

7.10

上午 xcyle 模拟赛。

晚上在学 pjudge 养鸡。太难了!!

题解

考虑把一部分的流量分到右边,另一部分分到左边。

这里我们要求丢到右边的流能够流满,而丢到左边的流量要满足 \(l\) 尽可能小。

最小割告诉我们,右边的最大匹配为:

\[\min_p(\sum_{r_j > p} c_j + \sum_{j=i}^{p} a_j) \]

\[\sum c - \max_{p}(\sum_{l_j \le i \le r_j \le p} c_j - \sum_{j=i}^{p} a_j) \]

\(s_p = \sum_{l_j \le i \le r_j \le p} c_j - \sum_{j=i}^{p} a_j\)。那么 \(s_p\) 的意思就是说,对于 \(l_j \le i \le r_j \le p\) 的区间,我们至少要将 \(s_p\) 的流量丢到左边。

怎么丢呢?找到 \(s_p\) 的前缀最大值,在 \(p\) 前的流中,贪心把 \(l\) 最小的那些流丢到左边去。

我们要维护的,就是这个丢的过程!

我们 \(i\) 从前往后扫。

扫的过程中对 \(s\) 做的操作就是:

  • 删除 \(r=i\) 的区间(\(s\) 全局减 \(c_j\))。
  • \(a_{i}\) 删去(\(s\) 全局加 \(a_i\),并删去第一个位置)。
  • 加入 \(l=i+1\) 的区间(后缀加 \(c_j\))。

注意到这样就只有后缀加操作会改变优先顺序!而后面的元素一直在变优!所以一些流一旦被丢到右边,那么他一定就一直留在右边了。

所以说啊,这样我们就有一些看起来比较合理的做法了!!

每次找到全局最大值 \(i_r\)(多个取最左的)。在 \(i_r\) 前找 \(l\) 值最小的 \(pos\)。然后 \(pos\) 前找上一个前缀严格最大值 \(i_l\)。然后用 \(pos\) 给左边 \(\min(c_{pos}, s_{i_r} - s_{i_l})\) 的流量,在 \(s\) 上进行修改。

睡觉的时候突然发现我好像会了 积性函数 \(O(n^{0.5+o(1)})\) 做法了!很兴奋,睡不着。

7.11

上午吃模拟赛。

下午实现了一下那个积性函数求和做法的一部分,然后写了篇博客。

晚上好像啥也没干。

7.12

上午听讲题

思考了一下乘和式模 \(2^k\) 的做法,想到了一个差不多的做法。唯一不同的是我利用了“当矩形 \(\bmod 2\) 的秩 \(\le n-(2k-1)\),那么答案为 \(0\)”,而他的做法是加若干行。

7.13

模拟考试。

被打包了。

7.14

模拟考试。

没有被打包。

7.15

UNR Day1!

先粗略看了眼题,以为有两个博弈,害怕。

先瞪 T1,我会二分!二分完猜了个结论,错了。又仔想了半天发现只有奇数位有用!然后过了。

然后看 T2,是不是乱搞题啊!先搞了一个,摁优化了一下大概就到了 \(1.6e5\)

然后做了半天,搞了个奇怪贪心过了。

T3 想了一会儿发现了做法,很好玩啊!写了好久,最后二十分钟过拍了。

下午看发现没有挂分,非常感动。听说 t3 只有我写了正解!

感觉这场比赛也不差啊!怎么这么多人差评啊!

7.16

UNR Day2!

看 t1。感受了一下,答案大概是取 \(b\) 最大的几个。

理性分析了一下发现确实只有 \(b\)\(k\) 大的可能不是答案。

然后就可以做了!过了过了!

t2 第一眼是枚举最大值,然后枚举最紧的限制,DP 记录多元生成函数。感觉不可写。

然后感觉数位 DP 状态数非常少,于是写了写,发现不太行啊!竟然只能过 \(n=4\)

理性分析了一下前面的想法,发现枚举最大值是不必要的!多元生成函数也是不必要的!

哦哦哦,那这样就是 \(n!2^n \operatorname{poly}(n)\) 的了啊!太对了!然后过了。

做 t3,秒了单根做法。先把 \(30\) 写了,最后还剩 \(75\) 分钟,可惜没有冲完。

不过也挺好,还是 rk1。

7.17

回杭州。

看病。

7.18

早上模拟赛题目挺好,不过也 ak 了。

看了眼 pjudge,写了个 t3。

题解

首先如果不跨 x 轴,就是把每个点分配到上面 / 下面,栈一样的匹配。

如果跨 x 轴,那么可以把下面的点翻折到上面,然后就是在一条线上,仍然是像栈的匹配。

把限制写出来发现可以 2-SAT。

7.19

早上模拟赛题目挺烂,写一半不想写了。

看了眼 pjudge,写了个 t3。

题解

首先先把线图上的 \(K_t(t \ge 4)\) 判掉:这些原图上的边,一定连接着原图上的同一个点。

删完后,在线图上就只剩下 \(K_3\) 了(原图每个点度数 \(\le 3\))。同时,线图上每个点的度数都不超过 \(4\)

给每个 \(K_3\) 设一个变量,发现这些变量同样可以建 2-SAT!然后就做完了。

7.20

好像感冒了。而且昨晚没睡好。所以没去学校,模拟赛开始后先睡了 2h。

t1 些了个巨大麻烦做法,t2 不会。t3 没做。

最后大家成绩也差不多吧。

7.21

早上睡觉

下午看 hhz 模拟赛。怎么搬的题题面错了啊?做了半天发现不会做菊花 /cf。

7.22

坐飞机

7.23

开幕式的时候出了学考成绩,3A1B,对我来说挺好。

笔试,简单的。写了个 noipt3。

听说有像 uoj 那样一键测样例的东西,这么牛!不过不知道笔试的时候就有,所以没用。

不打板子。

7.24

看 t1 马上会了,三十分钟搞定,但是 selfeval 怎么一直测不出来啊?

然后有个工作人员帮我把 selfeval 敲命令关掉了。

看 t2,画了几下也就会了,过了样例就扔了。这个时候还不到 1h,怎么输!!

推了推 t3 很快会了一个 \(\operatorname{poly}(n)\) 的做法。但是因为做了一个不太好的转化,导致没法做这题!甚至没法做 B 性质!然后搞了半天也只会点分治 2log。

然后试图想一些其他方法,想到了一个看似很高妙的拆贡献做法?

写了下,过了前两个样例!

测第三个,wa 了?

测了一下,发现结论假了!!

感觉又把优势全打没了啊???????

这个时候还有 100 分钟的样子。先把 \(n \le 300\) 写了。然后试图冲 2log 做法,最后二十分钟感觉调不出来了就拼了个 A 性质跑路。

期望得分 \(100+100+72\),实际得分 \(100+100+72\)

刚开始感觉考得挺平凡,出场的时候甚至听有人说一堆人 ak;但是问了一圈好像没有 ak 的,查完分之后甚至听说只有 \(4\)\(270+\) 就感觉不错。

听讲题,感觉好像 t3 挺憨的啊!算了可能我更憨。

7.25

嘉年华去得比较晚。

玩飞盘高尔夫,飞不进。

玩高尔夫,好难。

玩瞎子敲锣,玩之前感觉很简单,不过玩的时候很小丑啊!不过还是过了。

玩眼疾手快,怎么只抓到两个啊!

这个时候还剩大概二十分钟的样子,摆烂了。

于是不停地玩飞盘高尔夫,飞了若干次后过了。

然后玩飞盘,好像只扔了两次 \(0+2\) 就给我过了?

于是就有纪念品了。

然后去玩高尔夫,进了。

随便看了几眼,看 hdu 多校,03 比较好写写了。07 不会 QAQ。不会博弈。

7.26

t1 很快秒了。30 min 搞定。

t2 想了会儿,发现事实上本质是要对回文串算一个偏序啥的。

建回文自动机,用经典套路可以做到 2log。

但是 2log 看起来过不去的样子。但是发现同一个等差数列的节点上,权值是有单调性的,因此可以直接二分。

感觉很对。于是写写写,先写个暴跳 parent 吧。

赛前没打板子,还是回忆了一下 SA 和回文树怎么写。SA 写了 2log。

测测样例,发现 T 了。但是竟然是因为 SA 太慢 T 的!于是把 SA 改成 1log,不过改了好久才改对。改对之后就过样例了。

然后写倍增。写完后测了几组好像都挺快的?

想了想,发现等差数列的 \(\sum \log len\)\(\Theta(\log n)\) 级别的,所以是可以过的!

感觉大样例有点弱,就先写了个对拍,改了个错以过了几万组的拍。这个时候 2.5h。

看 t3。理性分析,推推性质,猜猜结论,得到了一个复杂度是拆分数乘以 \(\operatorname{poly}(n)\) 的做法。

感觉能过 \(n \le 28\) 啊!写个先。

写完之后发现怎么样例都这么大啊!

于是先写了个暴力,调了几下就能过手捏小数据了。

然后我测了一下 \(n=20\),飞快啊!

\(n=30\),同样飞快!

\(n=40\),还是能跑!

然后一一测过去,测到 \(n=100\),也跑过去了!

太震撼了!

selfeval,启动!

0.05s!100 分!

是不是 ak 了!一看时间,4h!

给 t1 写了个拍子。过拍了。

写完拍不知道干啥,开摆了。

比赛的时候一直在喝水和上厕所,最后总共喝了 5 瓶水。而且举手找监考的时候经常找到 EI!!

估分 \(100+100+100=300\)

下午查分发现 t2 了 \(8\) 分,太不牛了!

仔细一看,是我为了卡常没倍增满,多测没清空,还没拍出来!

实际得分 \(100+92+100=292\)

总分是 \(5+100+272+292=669\),赢!

posted @ 2023-07-26 20:45  zhoukangyang  阅读(7585)  评论(5编辑  收藏  举报