APIO2023 游记
很喜欢 JOISC 题解中的一张图。
文章差不多是每天写一点的形式,纯写着玩,不代表任何人的任何观点。
????
随出了一道神秘题。
3.21
看到了 APIO 缺头的消息。并有点想法把之前想的一道题头一头。
3.25
写完了要投的题的必要信息,把 PDF 头给了 APIO 2023 Team。
3.30
一直没有收到回信问了问 itst,结果好像是漏了。当天晚上收到了回信。
4.3
似乎通知可以报名去 APIO 旅游。不过好像并不算太正式的通知。rsy 和 ix 好像尝试报名了。不过一直没有明确的消息。
4.19
摆烂的时候收到了 yyl 学长的微信好友申请。结果是通知我 APIO 题目过审了。有点兴奋。
之后 yyl 问我想不想去 APIO,由于之前 rsy 和 ix 疑似不太能去,然后问了下学弟发现去的不多,我也决定就不去了。
另外所有操作需要使用 git,不过我不会,学了一会完全没懂。
4.22~4.23
在这段时间内写完了 std,比之前口胡的细节少了很多,写出来也很好看。
拍了一会拍了几个错,不过都是写的时候脑子不清楚导致的(
4.26
被 yyl 叫出去面谈了题目相关内容(
最终大致确定了现在的数据范围,以及部分分。
并且学会了题目所需的格式,感觉挺复杂(具体格式需要和 IOI 的格式一样,可以在 IOI 网站上下载以前的包)。
当时说这个题是第二简单的题(我一直以为会是最简单的)。
另外确定了五一节要把题造好的 ddl。
4.28
在车上把数据基本造好了,写了一堆 generator,感觉除了 Sub5 都应该挺强(
对于 Sub1,2,6,7,数据生成方式大致有:
所有数在
感觉挺强的!!!!
其他的 Sub 大致就是随或者手动构造。
总共 105 个点。
4.29~5.3
这段时间主要在配置题目所需要的其它内容(如 grader 之类的)。
然后中途发现数据需要加密,于是重造了所有点。和三个额外的样例。
然后发现车上造掉了几个点,补了一下。
尝试用了一下 git,但是连项目都没找到。
由于不会用 git 只有麻烦 yyl 帮我传一下题。
另外还有因为格式特殊我并不会本地验题,只能一个点一个点测(,所以只随机抽查了几个点。
5.4
yyl 又通知可以去 APIO 旅游。
不过名额十多分钟就被抢光了。
然后 rsy 告诉我。他和 ix 抢到了。
所以最后只有我去不了。
5.12
听说验题人验完了题。不过似乎没有什么反馈。
然后就需要我写题面,瞎编了点英文写上去了。
似乎还是不会测自己的题。。。
5.13
Shaber。
5.14
yyl 提出测试点太多了,感觉要删成五六十个,不过根据之前提到的造数据方式这样是很难删的,最终取舍了很久把每个 Sub 里的随机数据砍了几个,前几个 Sub 多砍了几个。
然后晚上打 CF 忘了。
5.15
大致确定完了删的点,最终删到了 75 个。
然后发现子任务配挂了(好像验题人没有验这个),于是检查了一下其他文件,好像没问题。
然后问了问 itst,果然是 shaber CMS 不支持 Skip,实际情况是后台全部测完然后给选手展示第一个错的。
和 yyl 交谈了一会感觉确实有点困难,不过 75 也能勉强接受。
晚上又改了会题面。
然后应要求再次尝试使用 git,结果还是找不到,实在忍不住了问了一下,结果好像是忘给我权限了(
不过 git 还是好难用,始终没找到如何用新的数据替换原有的数据。
偷看了一下 T1,好像会了。
偷看了一下 T3,不想看了润了。
5.16
改了一些题面然后还是不会用 git。只有再次求助 yyl(
好像说要给题目加背景,似乎有高手加了。
然后我发现我自己给中位数的定义错了。
5.17
再次询问 oj 状况没有结果。
另外完成了对题面的翻译,不知道大家觉得怎么样(
5.19
晚上终于有 oj 了,然而我登不上。急。
然后突然想起我有 Lemon,格式改着应该很快。(为什么之前一直忘了!!!)
本地冲了几个暴力和假算法,似乎一切正常。相对来说还是放心一点了。
5.20
登进了后台。
9 点好像有其它国家的同学在提交,其中 T2 有 11 28 35 的,感觉数据应该没啥问题(。
10 点正式开始之后,评测就开始卡了(,最开始看到是半个小时左右 T1 有几个 97 了。
过了一会看到有几个同学过了 T2,也都是正解。
后台有一个评测 delay,从最开始的几十 s 到最后一千多(。
中途随机抽查了几份代码,除了有一份只 WA 了 Sub5 一个点其它全过了的代码都很正常。手算了一下是我对了。不过不知道为什么其他点能过(,大概是偶数个且恰好是小的一边是中位数时最优,不太懂。
中途回答了一些不太重要的问题。
2 点左右最高分来到 266,T2 也过了一车,感觉这个题相对 T2 还是简单了(
3 点之后榜炸了,我最后一次看到榜是有 16 个 266。不过很多代码没评出来。
后记
这次出题最感谢的是 yyl 学长,出题的时候遇到很多困难都是找他帮忙,他也非常有耐心非常友善(虽然我好像一直有点怕和别人交流),也始终是在为选手考虑。
另外也感谢 Itst 学长,这次也咨询了很多相关的技术问题。
APIO 这次办的并不成功,感觉人多始终是一个主要问题(cms 什么时候能够 Skip 一下!!!)。还是感觉挺遗憾的,希望以后能带给选手更好的体验吧。
第一次给大比赛出题,有什么问题/建议可以就直接给我说吧。
std:
#include "sequence.h"
#include<bits/stdc++.h>
#define re register
using namespace std;
int n,m,a[500002],ans,mx[2000002],mn[2000002],sum,tg[2000002],Mx,Mn,pmx[2000002],pmn[2000002],smx[2000002],smn[2000002],Q[500002],hd,tl;
vector<int>AA[500002];
inline void Add(re int p,re int x){
mx[p]+=x,mn[p]+=x,tg[p]+=x;
}
inline void pd(re int p){
if(tg[p])Add(p<<1,tg[p]),Add(p<<1|1,tg[p]),tg[p]=0;
}
inline void pu(re int p){
mx[p]=max(mx[p<<1],mx[p<<1|1]);
mn[p]=min(mn[p<<1],mn[p<<1|1]);
}
inline void add(re int p,re int l,re int r,re int x,re int y,re int z){
if(l>=x&&r<=y)return Add(p,z);
pd(p);
re int mid=l+r>>1;
if(x<=mid)add(p<<1,l,mid,x,y,z);
if(y>mid)add(p<<1|1,mid+1,r,x,y,z);
pu(p);
}
inline void ask(re int p,re int l,re int r,re int x,re int y){
if(l>=x&&r<=y){
Mx=max(Mx,mx[p]),Mn=min(Mn,mn[p]);
return;
}
pd(p);
re int mid=l+r>>1;
if(x<=mid)ask(p<<1,l,mid,x,y);
if(y>mid)ask(p<<1|1,mid+1,r,x,y);
}
int sequence(int N, std::vector<int> A){
n=N;
for(re int i=1;i<=n;++i)a[i]=A[i-1],AA[a[i]].push_back(i),add(1,0,n,i,n,1);
for(re int i=1;i<=n;++i){
for(auto z:AA[i])Mn=1e9,ask(1,0,n,0,z-1),pmn[z]=Mn,Mx=-1e9,ask(1,0,n,z,n),smx[z]=Mx;
for(auto z:AA[i])add(1,0,n,z,n,-2);
for(auto z:AA[i])Mx=-1e9,ask(1,0,n,0,z-1),pmx[z]=Mx,Mn=1e9,ask(1,0,n,z,n),smn[z]=Mn;
hd=1,tl=0;
for(auto z:AA[i]){
Q[++tl]=z;
while(hd<=tl&&1ll*(smx[z]-pmn[Q[hd]])*(smn[z]-pmx[Q[hd]])>0)++hd;
ans=max(ans,tl-hd+1);
}
}
return ans;
}