APIO 2025 游记
省流:每题差一步,一步200分。
5.15 Day 0
接站时发现大巴车没座位了,遂下车,挤出租车,有个大行李箱要放腿上。
到宿舍,没网,晚上停热水,有蚊子在蚊帐外面咬到了我。有同学洗了冷水澡。
5.16 Day 1
听课日
早上听图论和集合幂级数,还有一题写过。下午听博弈论和构造,还有一题机房讲过。
晚上 22:30 准时熄灯。
5.17 Day 2
比赛日
开场看 T1,是一个哈希表,插入一组数,返回冲突数量。有10 分钟没看清题,以为一个 hack() 清空一次,后来发现每次给数组清空一次。数组总长需要
然后是 T1 的扯淡环节,12:00 我有了初步思路,大概是先找到一个存在冲突的序列,然后找到这个序列中的两个冲突的数,
但我有一堆问题:
- 那个冲突的序列我不会选,于是根据生日悖论随机化生成,但次数已经过
60000 了,而且这才第一步。 - 找冲突的两个数的时候,一开始是个分治做法,但是明显假了,浪费了
40 分钟,后来有了序列上二分的做法,要len\log len 长度的询问。 - 没有从小到大判断因数是否合法,然后一直想
n 的倍数怎么判。实际上也不应该枚举因数判断是否合法,而是每个质因子处二分,而且判断是否是x 的因数只需两个相差为x 的数是否冲突就行了。
于是意识差了好多,几十分没了。
但如果我看 T3:
对直角没有印象,而且对代价单增很反感,认为我无法一直保证这个性质,但实际上只要找到一个点,判断往哪边代价增就行了,毕竟形成直角代价就是固定的。/ll
场上好多人随便写写就过了。
真,随便写写就过了。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int id[N];vector<int> V;
void energy(int n,vector<int> v);
void rotate(vector<int> t,int x);
bool cmp(int x,int y){return V[x]<V[y];}
void energy(int n,vector<int> v){
V.resize(n);
for(int i=0;i<n;i++)id[i]=i,V[i]=v[i];
sort(id,id+n,cmp);
for(int i=n-1;i>=n/2;i--)
if(v[id[i]]-v[id[i-n/2]]!=25000)
rotate({id[i-n/2]},v[id[i]]+25000-v[id[i-n/2]]);
}
T2 完全没推,每次都会浪费好多时间到让我心态爆炸的题目上,考场上看到 T1 拼尽全力只有 25 pts 而且一直没存原来的代码,就已经知道没有牌了。
真是一个悲伤的故事。
电脑打不开了。
5.18 Day 3
活动日。
早上电阻网络没听进去多少,金牌线变成了银牌线,银牌线变成了铜牌线,于是我成了 AH 少数几个和寝室唯一的打铁的选手 /fd。
下午基本在车上,到了702听了门外和大厅的讲解,就去看纪录片了。领了瓶水。
回来后,好多人打摆。
分数线出来了,拿银牌的一共有两类人。一类是 T3 满分至少银牌,一类是 T1 会二分构造且 T2 会手玩的。
去看闭幕式,节目。。。
我成了 WC 和 APIO 共五块铁牌的选手。
赛季总结
本赛季共获得