APIO 2025 游记

· · 生活·游记

省流:每题差一步,一步200分。

5.15 Day 0

接站时发现大巴车没座位了,遂下车,挤出租车,有个大行李箱要放腿上。

到宿舍,没网,晚上停热水,有蚊子在蚊帐外面咬到了我。有同学洗了冷水澡。

5.16 Day 1

听课日

早上听图论和集合幂级数,还有一题写过。下午听博弈论和构造,还有一题机房讲过。

晚上 22:30 准时熄灯。

5.17 Day 2

比赛日

开场看 T1,是一个哈希表,插入一组数,返回冲突数量。有10 分钟没看清题,以为一个 hack() 清空一次,后来发现每次给数组清空一次。数组总长需要 \le 10^6n\le 10^625 pts,但我写了 40 分钟。然后又有半个小时理解错了得分范围,原来 \le 110000 才有满分。这当中我打了 T2,T3 第一档分,感觉 T3 要用到几何知识(其实不用)。

然后是 T1 的扯淡环节,12:00 我有了初步思路,大概是先找到一个存在冲突的序列,然后找到这个序列中的两个冲突的数, n 一定是他们差值的因数,枚举这个因数并判断。

但我有一堆问题:

  1. 那个冲突的序列我不会选,于是根据生日悖论随机化生成,但次数已经过 60000 了,而且这才第一步。
  2. 找冲突的两个数的时候,一开始是个分治做法,但是明显假了,浪费了 40 分钟,后来有了序列上二分的做法,要 len\log len 长度的询问。
  3. 没有从小到大判断因数是否合法,然后一直想 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 共五块铁牌的选手。

赛季总结

本赛季共获得 0 块奖牌,打败了 0\% 的选手。