THUPC2023游记
2023.2
THUPC 报名!
和 unputdownable,猫猬兽组队,队名 XJ 五队。
devin 让我们填毕业年份 2028。
收货地址填了 重庆市第114514中学冯阳阳纪念谷学校
。
upd 性别填 其他
被拒了。
2023.3.4
THUPC 2023 初赛测试赛!
\(3\) 月 \(4\) 日 \(13\) 点联络群消息:
## OJ网址
thupc2023.thusaac.com
## 环境测试 (https://thupc2023.thusaac.com/contest/4/home)
- 时间:2023/3/4 13:00 ~ 2023/3/5 10:00
- 语言及编译选项与正式初赛相同
- 所有参加环境测试的选手**共用**如下账号,因此您的提交能够被其他人看见
密码条:
username: thupc_test
password: ec76d8
- 正式比赛使用的用户名和密码条将在报名截止(2023/3/5 10:30)后生成并通过报名网站 (https://signup.thupc2023.thusaac.com/)发放
然后发现公用号可以发提问!
已解决 提问 THUPC测试 03-04 13:14:07 解决 THUPC测试 03-04 13:14:22
我, 03-04 13:14:07:
膜拜国际特级大师周康阳大佬
乐。
然后此时由于 NOI 春测刚结束,没管,去口胡了春测,感觉梦回普及组!不过被最后一道 Itst 题拉回现实了。
然后开摆。
大概下午 \(3\) 点半左右开始做题。
题面下载。
然后去提问区问了一句:
我, 03-04 15:34:54:
测试赛题解赛后会公开吗
回复是
管理员, 03-04 16:54:54:
这三道题是「CodePlus 8 × HWS第五期 - 决赛」复刻,已经帮您联系出题人,希望他们不鸽🙏
发现没人过 B,开题看了眼。
感觉是憨憨数位 dp,枚举取模后结果即做完。
然后开始写,第一次交 MLE 了(开了 map
),第二次交 TLE 了(递归大常数),最后卡了卡常才过。
代码:
// 膜拜国际特级大师周康阳大佬,今天在 THUPC 测试赛首页称您为大夏尊贵的大名,一股敬佩之油生然而,您在 THUPC 测试赛为国争光,扬我华威名,向您献上最为真挚的膜拜。
// 那就是希望。
// 即便需要取模,也是光明。
#include <algorithm>
#include <stdio.h>
#include <vector>
typedef long long llt;
typedef unsigned uint;typedef unsigned long long ullt;
typedef bool bol;typedef char chr;typedef void voi;
typedef double dbl;
template<typename T>bol _max(T&a,T b){return(a<b)?a=b,true:false;}
template<typename T>bol _min(T&a,T b){return(b<a)?a=b,true:false;}
template<typename T>T lowbit(T n){return n&-n;}
template<typename T>T gcd(T a,T b){return b?gcd(b,a%b):a;}
template<typename T>T lcm(T a,T b){return(a!=0||b!=0)?a/gcd(a,b)*b:(T)0;}
template<typename T>T exgcd(T a,T b,T&x,T&y){if(b!=0){T ans=exgcd(b,a%b,y,x);y-=a/b*x;return ans;}else return y=0,x=1,a;}
template<typename T>T power(T base,T index,T mod)
{
T ans=1%mod;
while(index)
{
if(index&1)ans=ans*base%mod;
base=base*base%mod,index>>=1;
}
return ans;
}
const ullt Pow10[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000,
10000000000,100000000000,1000000000000,10000000000000,
100000000000000,1000000000000000,10000000000000000,
100000000000000000,1000000000000000000,-1llu};
uint Nxt[10][10],A[10],tp,a,b,c;
ullt M[3][19][2][10][305][305];
bol Gone[3][19][2][10][305][305];
ullt Lim;
ullt count(uint id,uint NowBit,uint Allzero,uint KmpNow,uint ModB,uint LeftModC){
if(KmpNow==tp||(!Allzero&&!ModB))return 0;
if(!~NowBit)return!Allzero&&!LeftModC&&!id;
if(!LeftModC)return 0;
if(Gone[id][NowBit][Allzero][KmpNow][ModB][LeftModC])
return M[id][NowBit][Allzero][KmpNow][ModB][LeftModC];
Gone[id][NowBit][Allzero][KmpNow][ModB][LeftModC]=1;
ullt&ans=M[id][NowBit][Allzero][KmpNow][ModB][LeftModC];
ModB=ModB*10%b;
if(id){
uint t=Lim%Pow10[NowBit+1]/Pow10[NowBit];
if(t){
ans=count(0,NowBit-1,Allzero,Nxt[KmpNow][0],ModB,LeftModC);
for(uint i=1;i<t;i++){
ModB=(ModB+1)%b,LeftModC=(LeftModC+c-Pow10[NowBit]%c)%c;
ans+=count(0,NowBit-1,0,Nxt[KmpNow][i],ModB,LeftModC);
}
ModB=(ModB+1)%b,LeftModC=(LeftModC+c-Pow10[NowBit]%c)%c;
ans+=count(id,NowBit-1,0,Nxt[KmpNow][t],ModB,LeftModC);
}
else ans=count(id,NowBit-1,Allzero,Nxt[KmpNow][0],ModB,LeftModC);
}else{
ans=count(0,NowBit-1,Allzero,Nxt[KmpNow][0],ModB,LeftModC);
for(uint i=1;i<=9;i++){
ModB=(ModB+1)%b,LeftModC=(LeftModC+c-Pow10[NowBit]%c)%c;
ans+=count(0,NowBit-1,0,Nxt[KmpNow][i],ModB,LeftModC);
}
}
return ans;
}
int main()
{
#ifdef MYEE
freopen("QAQ.in","r",stdin);
// freopen("QAQ.out","w",stdout);
#endif
ullt l,r;scanf("%llu%llu%u%u%u",&l,&r,&a,&b,&c);
while(a)A[tp++]=a%10,a/=10;
std::reverse(A,A+tp);
Nxt[0][A[0]]=1;
for(uint i=1,j=0;i<tp;i++){
for(uint o=0;o<10;o++)Nxt[i][o]=Nxt[j][o];
Nxt[i][A[i]]=i+1,j=Nxt[j][A[i]];
}
ullt ans=0;
Lim=r+1;for(uint i=1;i<c;i++)ans+=count(1,18,1,0,0,i);
Lim=l;for(uint i=1;i<c;i++)ans-=count(2,18,1,0,0,i);
printf("%llu\n",ans);
return 0;
}
// 那就是希望。
// 即便需要取模,也是光明。
然后看 A。
套路地取相邻异或后,找了很久充要条件,最后调出来了。
代码:
// 膜拜国际特级大师周康阳大佬,今天在 THUPC 测试赛首页称您为大夏尊贵的大名,一股敬佩之油生然而,您在 THUPC 测试赛为国争光,扬我华威名,向您献上最为真挚的膜拜。
// 那就是希望。
// 即便需要取模,也是光明。
// 判掉长为 1 的序列。
// 对答案有贡献的信息只有相邻两项的异或值。(对吧)
// 异或完后再看与 i xor (i+1) 数列的匹配。
// i xor (i+1) = 2 lowbit(i+1) - 1
// 因此可以从不是该类型的数两侧断开。
// 断开后,我们把每个数用 log_2(v+1) 还原。
// 然后怎样的情况是合法的?
// 相邻两个 1 间距恒 2
// 相邻两个 2 间距恒 4
// 相邻两个 3 间距恒 8
// ...
// 等等。
// 同时,
// 每 2 个中恰有 1 个 1,
// 每 4 个中恰有 1 个 2,
// 每 8 个中恰有 1 个 3,
// ...
// 等等。
// 容易发现这个是合法的必要条件。
// 但是不充分。
// 譬如
// 1 7 1 3
// 这种。
// 考虑接下来出现的比当前小的元素应有的形态。
// 1 2 1 3 1 2 1 4 ...
// 直接扫描线算出每处右侧合理端点即可。
// 复杂度 O(n\log v)。
#include <algorithm>
#include <stdio.h>
#include <vector>
typedef long long llt;
typedef unsigned uint;typedef unsigned long long ullt;
typedef bool bol;typedef char chr;typedef void voi;
typedef double dbl;
template<typename T>bol _max(T&a,T b){return(a<b)?a=b,true:false;}
template<typename T>bol _min(T&a,T b){return(b<a)?a=b,true:false;}
template<typename T>T lowbit(T n){return n&-n;}
template<typename T>T gcd(T a,T b){return b?gcd(b,a%b):a;}
template<typename T>T lcm(T a,T b){return(a!=0||b!=0)?a/gcd(a,b)*b:(T)0;}
template<typename T>T exgcd(T a,T b,T&x,T&y){if(b!=0){T ans=exgcd(b,a%b,y,x);y-=a/b*x;return ans;}else return y=0,x=1,a;}
template<typename T>T power(T base,T index,T mod)
{
T ans=1%mod;
while(index)
{
if(index&1)ans=ans*base%mod;
base=base*base%mod,index>>=1;
}
return ans;
}
ullt A[100005];uint Last[65];
int main()
{
#ifdef MYEE
freopen("QAQ.in","r",stdin);
// freopen("QAQ.out","w",stdout);
#endif
uint n;scanf("%u",&n);
for(uint i=0;i<n;i++)scanf("%llu",A+i);
for(uint i=1;i<n;i++)A[i-1]^=A[i];
ullt ans=n--;
// for(uint i=0;i<n;i++)printf("%llu%c",A[i]," \n"[i==n-1]);
for(uint i=0;i<=61;i++)Last[i]=n;
for(uint i=n-1,r=n,v;~i;i--)if((v=(lowbit(A[i]+1)==A[i]+1?__builtin_ctzll(A[i]+1):0))){
if(Last[v]<i+(1llu<<v))_min(r,Last[v]);
else if(Last[v]>i+(1llu<<v))_min(r,i+(1u<<v));
Last[v]=i;
for(uint j=1;i+(1u<<j)<=r;j++)
if(Last[j]>=i+(1u<<j))
r=i+(1u<<j)-1;
for(uint j=1;j<v&&i+(1u<<(j-1))<r;j++)
if(Last[j]!=i+(1u<<(j-1)))
r=std::min(Last[j],i+(1u<<(j-1)));
ans+=r-i;
}else r=i;
printf("%llu\n",ans);
return 0;
}
// 那就是希望。
// 即便需要取模,也是光明。
调出来已是 0:06,决定摆了,睡觉去了,为明天正式赛提供更好的状态!
2023.3.5
THUPC 初赛!
mws 正开,upd 倒开,我中开。
说是 10:30 给密码条,然后一直到 11:00 都没给。
开始后还服务器错误了。
upd 开小作文题,结果不会然后来问我们。
我开 喵了个喵 II
,以为是模拟赛原题,交了然后 WA 了。
upd 说是贪心,交了然后 WA 了。
后来没过,去看 H 了。
口胡同余最短路,没过。
upd 此时已经过了 4 题。
然后推给 mws,他过了 H。
我跟榜做 C,然后过了。
然后因为 upd 已经过了 5 题,开始看 F。
而我去写 D 了。
比赛差 1h 结束时发现他让我看一下 F 的一个代码怎么优化,我没细看,让他自己看。
然后比赛快结束时我调出了 D 的树剖分块 + 根号重构,交上去被卡常了。
看了 F,发现是常系数齐次线性递推,然而来不及了。
最后封榜后一题没过,喜提 7 题,最终排名 80。/oh
顺带讲一下槽点。
关于 #pragma 问题的说明
首先我们对此深表歉意,我们没有在比赛前考虑到是否允许使用 #pragma。比赛开始后有队伍对此提问,我们讨论后决定全程禁用 #pragma,但时间已经不允许添加“在选手提交代码时进行检查”的功能,于是我们在赛后封禁了所有含有 #pragma(排除O2)的提交。我们仅通过比赛公告进行了通知,没有传达到全部选手,我们再次表示歉意。
我们最终的修复方法是:删除所有选手代码中的 #pragma 语句,重测这些代码。(已完成)
(P.S. 一道题目计入罚时的次数 = 第一次AC前所有非CE提交次数。因此如果您在一份包含 #pragma 的AC代码后又提交了若干份代码,之后的这些代码不会计入罚时)
此外,按群友建议,我们将在下次比赛开始前,把所有可能影响成绩的规则以文本形式通知到各位参赛选手。
然后有一个用户调查,我写了
C 被卡 `vector` 常数了。/kel (预处理因子部分,最后写了欧拉筛才卡过)
然后一开始没看到公告内不可 `#pragma`,被 ignore 了。/fn
能不能公告修改浏览器自动报弹窗啊。/kel
D 写了树剖分块 + 根号重构,花 2h 码了 10k 代码,被卡常了,没过。/kel
能不能像去年一样开 10s 啊,实在让暴力过几个就过了吧,别让分块被卡常了。/kel
毕竟现在这个时限暴力也能过啊。(学习 Ynoi2077 好榜样(不是
以及,能不能给出第一个 TLE 的点的运行时空情况啊。/kel
不过,不出意外,应该可以勉强苟进复赛!
2023.4
复赛邀请函发了,我们没收到。
看看有没有二轮邀请吧。
毕竟很多队伍会去 pkucpc 和 icpc 湘潭。
2023.5.7
收到二轮邀请函了。
改了一下报名信息啥的,地址什么都填好了。
2023.5.12
收到正式邀请函了。
恭喜你们的队伍 学军中学五队 在 2023 年清华大学学生程序设计竞赛暨高校邀请赛(后简称 THUPC2023) 初赛中表现出色!我们诚挚地邀请你们来清华大学现场参加 THUPC2023 的决赛。
决赛的报道和试机时间为 5 月 27 日下午 2 点到 5 点,比赛时间为 5 月 28 日上午 10 点到下午 3 点,地点均在校内的计算机开放实验室。颁奖和讲题时间为 5 月 28 日下午 3:30 到 5:30,地点在校内的中央主楼后厅。更多比赛时间和地点的信息,请以公众号“酒井算协”的后续通知为准。
此外,我们需要收集大家的衣服尺码和入校预约信息,请大家在尽快填写问卷 https://wj.qq.com/s2/12330110/c51f/。
最后,期待能与大家在清华大学一同度过一个美好而愉快的周末!
清华大学学生算法协会
官方 QQ 交流群:553210963,870699338
官方公众号:酒井算协
官方 B 站账号:清华大学学生算法协会
2023.5.25
踏上前往北京的火车。
入住 bnds 宿舍。
bnds 住宿条件看上去很高档。
2023.5.26
上午是 bnds 讲课,下午是模拟赛题讨论。
晚上得到了一些关于 C 类的消息。
2023.5.27
上午正常训练。
下午试机。
拿到了 SF 徽章。StudyingFather:徽章滞销,帮帮我们。
面到了很多外校大佬,譬如 Lyckcat、Chinese_zjc、QwQcOrz、Qiuly、Alpha1022、MoQZ。还单向面了很多大佬,譬如 flowerletter、mrsrz。还看到了 E.Space 等人。
喜闻乐见的签名时间,最难绷的就是经典复刻两红一黑过河卒。
最后的签名墙长这样:
猫猬兽和 pog 分别都赶来了。
下去后领了物资,报队名时我们队伍名字显得特别诡异。
我们座位在中间机房。看了眼座位表,我们前一个队是镇海队,后一个队是 jiangly 单排,再往后一个是纪中队,再往后就是 dx pog cmll 队了。
四面很多人在游走,包括但不限于 E.Space 和 lxl。
试机赛四道题目依次分别是 A+B Problem、造计算机、数正方体和德州消消乐。
我写了 A+B Problem,upd 写了德州消消乐,mws 写了数正方体(写挂了),然后我们就润了。
发现隔壁镇海队有键盘垫赠送,我们没有,怎么回事呢。原来要初赛优异队伍才有啊。
没有加训 ACM。
去秒了个 ABC 的 Ex。
2023.5.28
进场了。换座位了,这次坐在东机房。终于不至于被旁边 jiangly 干趴下了!(然而 jiangly 根本没来,去打隔壁 pkucpc 了,怎么会是呢!)
对面队伍有漏保,左后方有 zak sjy L,左前方有 Mophie zmx Mer alpha Qiuly 月神,右边有出题人 E.Space 随机游走。四面埋伏!
怎么有高素质选手开赛前打板子的啊!
怎么有高素质选手开赛前拿到纸质题面的啊!
开赛的时候工作人员把宣布比赛开始鸽了。所以完全没反应过来。
怎么有 bot 队 4s 过作文题啊!print('kejie')
能写这么快吗!
登录时就听见对面漏保队在大喊柯洁。/kx
开场通览了一遍,A 很图论,B 很贪心,C 很毒瘤,D 很清奇,E 很&;?>#&*%<%$^(鉴定为小 E 题),F 很神秘,G 很%#[%#?)@<^&(鉴定为小 E 题),H 很一眼,I 很 poly,J 很难写,K 很博弈,L 很 lxl,M 很整活。
我看到 H 后一眼秒了,直接开写。
然后随机开题,upd 觉得 G 很简单,直接开冲,没整出来。
mws 写了 D,罚了一发过了。
我一眼秒了 A 的 \(O(2.83^k+k^22^k+mk)\) 做法,光荣过不了样例。
机时给 upd 写 G,我想了想把 A 细节搞清楚了,顺带看了看 B、K。
upd 没冲出 G,我开始调 A,光荣 TLE。然后加了各种卡常后就过了。
然后 upd 开始写 J,漏判 -1
WA 了好几发,最后才过。由于土豆服务器又炸了,比赛延时 5min。
我和 upd 口述了 B,大概讲了下外层的贪心,然后发现自己不会内层判定。upd 一眼秒了内层贪心,非常厉害!
然后巨大恶心数位 dp K 留给了 upd,我看 F,和 upd 确认了一下做法。
然后 upd K 调了一年,比赛结束前 20min 才发现 \(1\oplus2\oplus\dots\oplus n\oplus m\) 写挂,upd 直接懵掉了,于是我改了改那里就过了。
然后我开始 speed run 做 F,比赛结束前 5min 写完,一交 WA 了!
\(7\) 题遗憾离场!
zak 队封榜后没过题,喜提 \(9\) 题(zak 是 L 题验题人,不能写 L,给 sjy 写被卡常了)。pog 队题数为标准 \(8\) 题。不过最后我们以微弱罚时优势殴打了 Mophie 队,怎么会是呢。
讲题时有大约一半题是 Itst 出的,E,G 是 E.Space 出的,F 是 JV 出的,L 是 lxl 出的,M 是保密老师出的。A,D 出题人不认识。
E,I 分别只过了一只队伍,G 无人生还。E.Space 的喵了个喵抱枕送不出去了。/kx
比赛打到最后看到对面漏保队开始打牌。蚌埠住了。
颁奖时 zak 队拿了三等奖,遗憾离场。hhz 队 rank 2,喜提 \(¥8192\) + 键盘。「被李子弥打爆了」。
pog 和 mws 提前回去了。第二天他们还要文化课。
晚饭徐老师预定了,把很多清华学长叫过来了,包括但不限于 Siyuan zhouzhengdong Mr_Spade。
hehezhou 到场这事徐老师还不知道。
被 Mr_Spade 认出来了。(Mr_Spade 去年暑假给我们机房线上讲过课)
本文来自博客园,作者:myee,转载请注明原文链接:https://www.cnblogs.com/myee/p/THUPC2023-trip.html