疑似 WC 2025 游记
cff_0102
·
·
生活·游记
如题。顺便解释下为什么我所有游记前面都要加“疑似”呢,因为这样从标题就看不出来我有没有真去。
CSP-S 344pts,报 WC 偶遇学校教练阻止,拼尽全力无法说服。
(注:上面是一个梗,为了与原文照应所以使用了“偶遇学校教练阻止”“拼尽全力”“无法说服”等词,并非故意。网络信息良莠不齐,请谨慎辨别网络上的虚假不良信息,提高媒介素养,学会信息节食。WC 是一个没有实际用处的活动,题目赛后也能看到,因此教练说的很有道理。b
a
s
e
6
4
5
p
W
Z
5
7
u
D
5
7
+
7
5
o
i
R
5
r
S
b
6
L
C
3
6
L
S
m
5
Y
+
3
5
Y
+
R
5
4
6
w
5
L
q
G
5
L
i
K
6
Z
2
i
6
Y
K
j
5
L
i
A
5
Y
+
l
5
Y
2
B
5
Y
i
G
5
5
S
f
5
r
C
U
7
7
y
M
5
L
q
O
5
p
i
v
5
o
i
R
5
b
C
x
5
Y
q
g
5
L
q
G
6
L
+
Z
5
Y
+
l
)
期末考试要进 rk 前 300 才能保证不被学校强制退役,害怕了。
Day -5
英语听说期末考试。
前略。
下面是我当天写的。
Part B 里面有个问题:Where is Luma from?
录音原文:He is from Shenjiang.
理性推理派:后面录音中提到了 Roast Whole Lamb,所以应该是 Xinjiang。
广东局限派:这是 GD 版本的高考英语听说考试,应该只会出现广东的地名,所以是 Zhanjiang。
不会地理派:我们学校的听说期末考试,肯定是 Shenzhen!
原文至上派:即使我没听过这个地方,但是他这么说一定有他的道理。(于是犹豫了五秒,听完别人说完正确答案后仍然大声坚定地说出了自己的答案)Shenjiang!
你知道吗我差点在录音还没结束的时候笑场了。
tyy(某同学)喜提绰号“深江哥”。‘
还是 Part B,有一个中译英,大概是“他在班上适应地困难吗”,我忘记适应的英文是啥了。
我的脑子突然闪过一个词:适应型(adaptive)。
脑子:哦所以适应的英文是……
耳朵:开始录音
嘴巴:Did he feel hard in class?
脑子:adapt! 是 adapt!
耳朵:停止录音
Day -2
期末考试第一天。
早上:语文。
下午:数学。
语文居然在时间内写完了,
但是我也不知道我议论文在写些什么,
所以还是看看下午的数学吧,
数学更难,
听说其中 149 的大佬这次期末没写完,
那我就更不用说了,
准备退役吧,
Day -1
期末考试第二天。
早上:物理、历史。
下午:英语。
物理还是没写完。。
历史倒是写完了,不知道是为了照顾还是怎么的,只有四道简答题(虽然占了 8+12+8+12=40 分)
英语?诶诶诶一堆不认识的单词,
考前看了的单词全部都是考场上当错误选项排掉的,
还是得在剩下的里面选一个。
这次考试印象最深的单词是 acquaintance,因为里面有一个 aqua。
考完之后头就痛了,我也不知道为什么。
平常都是那种偏头痛,但是这次考完感觉和平时那个不一样,疑似只是用脑太多了。
晚上的复习是一大难点,因为第二天要考四门:
Day 0
期末考试最后一天。
早上:化学、地理。
下午:政治、生物。
化学复习了,但没完全复习。
主要是有很多书上没有的啊,
比如我知道 KSCN 可以检验 Fe3+,但不知道 K3[Fe(CN)6] 可以检验 Fe2+。
这个抛开不谈,我数理化全都没写完,
一个 KSCN 与 H2O2 的反应硬控我五分钟直到考试结束,
不是配平,是说明会生成 N2 和 CO2 让你写出整个方程式。
哎哎,
地理要考到必修二但是我必修二不见了,
没关系反正最后还是考下来了,
提前半小时写完然后又从头做了一遍,改了好几个答案((
第二遍我还闲到和 aqua 一起做了(
但是这不代表我地理能考多高。。
还是看看下午的政治吧!
要考必修一二全册,
我只有必修二的提纲,
而且到下午才背上第一句话,
这句话在我的答题卡答案上起到了决定性作用,
因为我就背下了这句话,其它材料题的答案我都是从前面选择题的选项里面抄的,
当然我还能吃中考的老本,创新协调绿色开放共享我还是记得的——
只记得这个了。
政治的别说太多了,半小时后就是我们的生物考试,
选择题全都看不懂,
真的看不懂啊,
算了吧,重开吧。
然后还要上一个星期的课到腊月二十六才能放假。
xm 今天去 WC 的,我 CSPS344 要报早报上了,但是 scy(教练)不让的话我也没办法。
---
总结:考试的时候脑子里要么一直放考前播放的那个音乐,要么一直放 The Sypha,有时候甚至导致我读题读到一半分心了,下次改……好吧这个不知道怎么改,让 aqua 压制?(
### Day 1
WC 发生了啥啊,没去 WC 不知道。
随便建了个群,群号 185800038。
实际上只是在刷群号玩。
然后就,

我就是建了几个群而已啊!!!11
然后我等了个把分钟,再尝试解封,终于好了/youl
最后就留了个 185800038 这个看起来群号有点神奇的群(虽然不如上面的那个 \*1314\*)来到处~~抓人~~加了。
好吧上面可能是广告宣传之类的,
听说今天高级又在搞什么活动,但是我可懒得回去了(反正明天还得去上一周课 qwq
在这边再凑点字,假装我真的去了 WC,混个全站推荐。
下午有个 UM。
UM 倒是没什么事,没人私信找我问问题,
~~在这期间还让 aqua 附体玩了会~~,
最后几分钟看到了两位大佬反超成为前二名,最后一秒出现 T2 最高分,挺厉害的。
赛后总结置顶了,却还没有迁移题目到主题库,这咋回事啊。
然后前脚刚把我的置顶,管理员又倒闭了,
不到一分钟后发的另一个比赛的赛时答疑又磨蹭了好久还没有置顶(
嗯,今天更新了 <https://www.luogu.com.cn/article/ddpjkr9f> 这个以前“误操作”为全站推荐的东西,众所周知修改内容会重审,结果被这一任的管理审到了 xd
UM 的题目迁移至主题库了,但是题目提供者好像又搞错了。。然后在群里喊话又没人回这咋回事啊。
诶算了明天回来再瞅一眼如果还是没改的话我再骚扰。
---
upd:谢谢喵。

~~然而另一个比赛的赛时答疑帖一个小时了还没有置顶。~~

我的误操作被认可了/jy
~~然而另一个比赛的赛时答疑帖两个小时了还没有置顶。~~
~~然而另一个比赛的赛时答疑帖四个半小时了还没有置顶。~~
晚上弄了个新的群聊,Luogu Plural Club,群号 114033994。
嗯,主要是看 luogu 上 plural 相关话题好像在变多,想着建一个群好点吧。
群头像是我自己搞的——在埃蒙加德环里面加了个 luogu 的图标。
嗯,然后再搞了搞,大概是个群的样子了。
不过呢,我要在这里挂一个人:

然后他还以“创造型”的身份重新申请了一遍,但是我有一百万个证据反驳他。我问他量表证据,他也没回我了,于是我也不管他了。/youl

~~感觉上面写的像日记一样,游记是不是就是公开版的日记啊(~~
~~然而另一个比赛的赛时答疑帖五个小时了还没有置顶。~~
upd:理我了,但是发了个我不认识的量表结果过来(且 FP 高),我问链接,一看怎么像是个内测版,丢 p 群问了下,还没有确定的回答,~~所以先把他晾着了~~。
~~然而另一个比赛的赛时答疑帖五个半小时了还没有置顶。~~
明天要去学校集训——
我们学校教练会找一个教练,每人每天 300 块给我们上课。
嘛,明天就是这么集训的第一天。
集训还能卷题解审核吗?
可以的!
好吧不过大部分时间的题解要被 gza 卷掉了 qwq。
差点忘记报名下周轮换了,报一下。
话说一周审核题解记录到底是多少啊,gza 说下周要冲,我想评估一下可不可行(
### Day 2
~~然而另一个比赛的赛时答疑帖六个小时了还没有置顶。~~
无意间搞了个今天最早评测,没啥用,一年 365 天这个没什么实际意义啊。不过真的是随手交的评测所以在这里记一下x
~~然而另一个比赛的赛时答疑帖十三个小时了还没有置顶。~~
~~然而另一个比赛的赛时答疑帖十四个小时了还没有置顶。~~

?
~~然而另一个比赛的赛时答疑帖十四半个小时了还没有置顶。~~
~~然而另一个比赛的赛时答疑帖十六个小时了还没有置顶。~~
难绷之我交代码把 ll 换成 int128 后提交全变 0 分,后来才发现是交错题了。。。
[喵喵](https://www.luogu.com.cn/discuss/1042338)。
~~然而另一个比赛的赛时答疑帖十八个小时了还没有置顶。~~
~~然后另一个比赛的赛时答疑帖十八个半小时了终于置顶了。~~
但是我肯定是没时间打的了。
下午还要继续集训。
中午偷点外卖恰好被机房同学碰着了!!!11,要是告教练了我待会就死了()

/jy。
~~(其实 1.6 kkk 不在所以我 1.7 才上任的来着~~
下午在机房摸会鱼,目前仍不知道目前 WC 状况。

防沉迷,害怕。
Additionally, 今天下午只做了一道不到紫的题,废了 qwq。
又多了个 [LGPC 洛谷团队](https://www.luogu.com.cn/team/98424),也欢迎加入 qwq。
~~然而另一个比赛的赛后总结帖两个小时了还没有置顶。~~

卷王啊。
~~然后另一个比赛的赛后总结帖两个半小时了终于置顶了。~~
晚上头痛,在机房睡着了/lh
笔者不愿透露更多相关信息。
### Day 3
开学术,其实感觉我水不水做题速度都差不多/hsh,这是咋回事。
WC 比赛日。
然后我们学校集训也有个比赛,9:00-13:30。
前两题是原创题,所以不多说。
首先开 T1,注意到关键词 `树` `期望` `逆元`,目测不会,开 T2。
T2 不难看出一个错误的贪心,交了之后可以获得 10 分。因为我没看出正常贪心哪错了,所以放弃看 T3。
T3 原题 [AGC037D](https://www.luogu.com.cn/problem/AT_agc037_d)(我们限网了所以找不到原题)。
9:13 我先交了个 `No` 试试水,发现得 0pts,所以没有无解情况。
然后大概想了一下,先搞了个不难模拟出错误数据的代码,拿了 20pts:
```cpp
#include<bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;
#define fi first
#define se second
int n,m;
pii pos(int x){
return {(x-1)/m+1,(x-1)%m+1};
}
int num(pii p){
return (p.fi-1)*m+p.se;
}
const int N=105;
int a[N][N];
int b[N][N];
void op(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<a[i][j]<<" ";
}cout<<"\n";
}
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
sort(a[i]+1,a[i]+1+m,[](int x,int y){
if(pos(x).fi!=pos(y).fi)return pos(x).fi<pos(y).fi;
else return pos(x).se<pos(y).se;
});
}
for(int j=1;j<=m;j++){
int x=pos(a[1][j]).fi;
for(int i=2;i<=n;i++){
if(pos(a[i][j]).fi==x){
int p=lower_bound(a[i]+1,a[i]+1+m,num({x+1,1}))-a[i];
//cout<<i<<" "<<j<<" "<<a[i][j]<<" "<<p<<" "<<a[i][p]<<endl;
swap(a[i][j],a[i][p]);
}
}
}
op();
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
b[i][j]=a[j][i];
}
sort(b[i]+1,b[i]+1+n,[](int x,int y){
if(pos(x).fi!=pos(y).fi)return pos(x).fi<pos(y).fi;
else return pos(x).se<pos(y).se;
});
for(int j=1;j<=n;j++){
a[j][i]=b[i][j];
}
}
op();
return 0;
}
```
然后我也不知道干了啥就干到了 40pts:
```cpp
#include<bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;
#define fi first
#define se second
int n,m;
pii pos(int x){
return {(x-1)/m+1,(x-1)%m+1};
}
int num(pii p){
return (p.fi-1)*m+p.se;
}
const int N=105;
int a[N][N];
int b[N][N];
void op(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<a[i][j]<<" ";
}cout<<"\n";
}
}
//pii c[N][N];
int c[N][N];
int cc[N];
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
// sort(a[i]+1,a[i]+1+m,[](int x,int y){
// if(pos(x).fi!=pos(y).fi)return pos(x).fi<pos(y).fi;
// else return pos(x).se<pos(y).se;
// });
// for(int j=1;j<=n;j++)c[i][j].fi=j;
// for(int j=1;j<=m;j++){
// c[i][pos(a[i][j]).fi].se++;
// }
// sort(c[i]+1,c[i]+1+n,[](pii x,pii y){
// return x.se>y.se;
// });
for(int j=1;j<=m;j++){
c[i][pos(a[i][j]).fi]++;
}
}
for(int j=1;j<=m;j++){
for(int i=1;i<=n;i++)cc[i]=m-j+1;
for(int i=1;i<=n;i++){
int mn=114514,p=0;
for(int k=1;k<=n;k++){
if(c[i][k]){
if(mn>cc[k]-c[i][k]){
mn=cc[k]-c[i][k];
p=k;
}
}
}
cc[p]=114514;
c[i][p]--;
for(int k=1;k<=m;k++){
if(pos(a[i][k]).fi==p){
b[i][j]=a[i][k];
a[i][k]=-114514;
break;
}
}
for(int k=1;k<=n;k++)cc[k]-=c[i][k];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)a[i][j]=b[i][j];
}
op();//cout<<endl;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
b[i][j]=a[j][i];
}
sort(b[i]+1,b[i]+1+n,[](int x,int y){
if(pos(x).fi!=pos(y).fi)return pos(x).fi<pos(y).fi;
else return pos(x).se<pos(y).se;
});
for(int j=1;j<=n;j++){
a[j][i]=b[i][j];
}
}
op();
return 0;
}
```
然后我又忘记我怎么搞了就搞到了 60pts:
```cpp
#include<bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;
#define fi first
#define se second
int n,m;
pii pos(int x){
return {(x-1)/m+1,(x-1)%m+1};
}
int num(pii p){
return (p.fi-1)*m+p.se;
}
const int N=105;
int a[N][N];
int b[N][N];
void op(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<a[i][j]<<" ";
}cout<<"\n";
}
}
char sp(int x){return x>=10?'A'+x-10:x+'0';}
void spop(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<"("<<sp(pos(a[i][j]).fi)<<", "<<sp(pos(a[i][j]).se)<<") ";
}cout<<"\n";
}
}
//pii c[N][N];
int c[N][N];
int cc[N];
pii tp[N];
int tmp[N];
bool vis[N];
int main(){
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
// sort(a[i]+1,a[i]+1+m,[](int x,int y){
// if(pos(x).fi!=pos(y).fi)return pos(x).fi<pos(y).fi;
// else return pos(x).se<pos(y).se;
// });
// for(int j=1;j<=n;j++)c[i][j].fi=j;
// for(int j=1;j<=m;j++){
// c[i][pos(a[i][j]).fi].se++;
// }
// sort(c[i]+1,c[i]+1+n,[](pii x,pii y){
// return x.se>y.se;
// });
for(int j=1;j<=m;j++){
c[i][pos(a[i][j]).fi]++;
}
}
for(int j=1;j<=m;j++){
for(int i=1;i<=n;i++)cc[i]=m-j+1;
// for(int i=1;i<=n;i++)tp[i]={0,i};
// for(int i=1;i<=n;i++){
// for(int k=1;k<=n;k++){
// if(c[i][k])tp[i].fi++;
// }
// }
// sort(tp+1,tp+1+n);
for(int i=1;i<=n;i++)vis[i]=0;
for(int _=1;_<=n;_++){
//int i=tp[_].se;
//优先处理哪一行的哪一个颜色
int mn=11451419,p=0,l=0;
for(int i=1;i<=n;i++)if(!vis[i]){
for(int k=1;k<=n;k++){
if(c[i][k]){
if(mn>cc[k]-c[i][k]){
mn=cc[k]-c[i][k];
p=k;
l=i;
}
}
}
}
vis[l]=1;
cc[p]=11451419;
c[l][p]--;
for(int k=1;k<=m;k++){
if(pos(a[l][k]).fi==p){
b[l][j]=a[l][k];
a[l][k]=-11451419;
break;
}
}
for(int k=1;k<=n;k++)cc[k]-=c[l][k];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)a[i][j]=b[i][j];
}//spop();
op();//cout<<endl;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
b[i][j]=a[j][i];
}
sort(b[i]+1,b[i]+1+n,[](int x,int y){
if(pos(x).fi!=pos(y).fi)return pos(x).fi<pos(y).fi;
else return pos(x).se<pos(y).se;
});
for(int j=1;j<=n;j++){
a[j][i]=b[i][j];
}
}//spop();
op();
return 0;
}
```
12:34 感觉死磕不过去了,开 T1,看了一下,发现实际上和逆元什么的没有关系。不过这是我第一次写期望 dp 就是了,还是树上的期望 dp。后来居然一发过了!!!11,然后继续搞 T3。
然后呢,我看怎么都过不去就索性套了个 shuffle:
```cpp
#include<bits/stdc++.h>
using namespace std;
using pii=pair<int,int>;
#define fi first
#define se second
int n,m;
pii pos(int x){
return {(x-1)/m+1,(x-1)%m+1};
}
int num(pii p){
return (p.fi-1)*m+p.se;
}
const int N=105;
int a[N][N];
int b[N][N];
void op(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<a[i][j]<<" ";
}cout<<"\n";
}
}
char sp(int x){return x>=10?'A'+x-10:x+'0';}
void spop(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cout<<"("<<sp(pos(a[i][j]).fi)<<", "<<sp(pos(a[i][j]).se)<<") ";
}cout<<"\n";
}
}
//pii c[N][N];
int c[N][N];
int cc[N];
pii tp[N];
int tmp[N];
bool vis[N];
int main(){
mt19937 aqua(time(0));
ios::sync_with_stdio(0);cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
// sort(a[i]+1,a[i]+1+m,[](int x,int y){
// if(pos(x).fi!=pos(y).fi)return pos(x).fi<pos(y).fi;
// else return pos(x).se<pos(y).se;
// });
// for(int j=1;j<=n;j++)c[i][j].fi=j;
// for(int j=1;j<=m;j++){
// c[i][pos(a[i][j]).fi].se++;
// }
// sort(c[i]+1,c[i]+1+n,[](pii x,pii y){
// return x.se>y.se;
// });
for(int j=1;j<=m;j++){
c[i][pos(a[i][j]).fi]++;
}
}
for(int j=1;j<=m;j++){
for(int i=1;i<=n;i++)cc[i]=m-j+1;
// for(int i=1;i<=n;i++)tp[i]={0,i};
// for(int i=1;i<=n;i++){
// for(int k=1;k<=n;k++){
// if(c[i][k])tp[i].fi++;
// }
// }
// sort(tp+1,tp+1+n);
for(int i=1;i<=n;i++)vis[i]=0;
for(int _=1;_<=n;_++){
//int i=tp[_].se;
//优先处理哪一行的哪一个颜色
int mn=11451419,p=0,l=0;
for(int i=1;i<=n;i++)tmp[i]=i;
shuffle(tmp+1,tmp+1+n,aqua);
for(int q=1;q<=n;q++){
int i=tmp[q];
if(!vis[i]){
for(int k=1;k<=n;k++){
if(c[i][k]){
if(mn>cc[k]-c[i][k]){
mn=cc[k]-c[i][k];
p=k;
l=i;
}
}
}
}
}
vis[l]=1;
cc[p]=11451419;
c[l][p]--;
for(int k=1;k<=m;k++){
if(pos(a[l][k]).fi==p){
b[l][j]=a[l][k];
a[l][k]=-11451419;
break;
}
}
for(int k=1;k<=n;k++)cc[k]-=c[l][k];
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)a[i][j]=b[i][j];
}//spop();
op();//cout<<endl;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
b[i][j]=a[j][i];
}
sort(b[i]+1,b[i]+1+n,[](int x,int y){
if(pos(x).fi!=pos(y).fi)return pos(x).fi<pos(y).fi;
else return pos(x).se<pos(y).se;
});
for(int j=1;j<=n;j++){
a[j][i]=b[i][j];
}
}//spop();
op();
return 0;
}
```
我的运气很好啊,第一次交居然 80pts,后面交了好几遍都是 60pts。
我也不知道我是咋 80pts 的!!!11,可能是因为我的随机数生成器叫 aqua 吧 XD
然后 80pts(13:06)就开摆了(想过图论建模之类的甚至想过是不是可能和二分图有关系但是就是没想到这么建模!看来我还是太弱了,也确实切不了紫题 qwq
又尝试搞了 20min 的 T2,过不去,看 T4,发现已经 13:25,遂胡乱写代码想骗分,没骗到,比赛结束止步 190pts。
不过在机房排名还是 rk1 的(

我是 sky 我是 sky 我是 sky 我是 sky 我是 sky 我是 sky 我是 sky!!!11
好了现在数量平衡了(
喵喵,晚上文艺汇演,但是我们机房还在上课,看不了 qwq。
LGPC 群都有人面起来了 qwq,xm。
然后审了会题解,然后就回宿舍了,然后下一行应该就是明天了。
电子草稿:

### Day 4
今天的比赛简单点,但是是 OI 赛制。
T1 是原我直接放了:
[](https://codeforces.com/gym/104976/problem/D)
std 值域是 O(n) 的,但是我搞了个值域 O(1) 的正解(
```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(0);cin.tie(0);
int n;cin>>n;
if(n%4==3){
int s[10]={-2,1,-2,1,2,-1,2,-1,-2,1};
for(int i=1;i<n*2;i++){
cout<<s[i%8]<<" ";
}
cout<<114514;
}else{
int s[10]={-2,1,2,-1,2,-1,-2,1,-2,1};
for(int i=1;i<n*2;i++){
cout<<s[i%8]<<" ";
}
if(n%4==1){
cout<<114514;
}else if(n%4==2){
cout<<1;
}else{
cout<<-1;
}
}
return 0;
}
```
09:36:43 搞完 T1 后看 T2,我不知道是不是原创题所以我就不详细说了,刚开始我把题目看错了,上大样例才知道问题在哪,接下来就很简单了,然后 11:17:37 终于过了。
后注:T2 也是原题,所以我也发题面了:

我的代码(很抽象的基环树找环):
```cpp
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
bool vis0[N];
vector<int>g[N];
stack<int>st;
vector<int>r;
bool f;
void dfs0(int x,int l){
if(vis0[x]){
st.pop();r.emplace_back(x);
while(st.top()!=x){
r.emplace_back(st.top());
st.pop();
}
f=1;
return;
}
vis0[x]=1;
for(int y:g[x])if(y!=l){
st.emplace(y);
dfs0(y,x);
if(f)return;
st.pop();
}
}
bool v[N];
void mian(){
int n;cin>>n;
memset(vis0,0,sizeof vis0);
memset(v,0,sizeof v);
while(!st.empty())st.pop();
r.clear();
for(int i=1;i<=n;i++)g[i].clear();
f=0;
for(int i=1;i<=n;i++){
int u,v;cin>>u>>v;
g[u].emplace_back(v);
g[v].emplace_back(u);
}
st.emplace(1);
dfs0(1,0);
int rs=r.size();
for(int i=0;i<rs;i++)r.emplace_back(r[i]);
int ans=0;
for(int i=1;i<=n;i++){
if(g[i].size()==1)ans++;
}
bool v1=0;
for(int i=0;i<rs;i++){
if(g[r[i]].size()>2)v[r[i]]=1,v1=1;
}
int l0=0,mx=0;
for(int i=0;i<rs*2;i++){
if(v[r[i]])l0=0;
else{
l0++;
mx=max(mx,l0);
}
}
cout<<ans+min(mx,3-v1)<<"\n";
}
int main(){
ios::sync_with_stdio(0);cin.tie(0);
int t;cin>>t;
while(t--)mian();
return 0;
}
```
11:37:24 交了第一发 T3 的暴力,拿了 40pts。接下来优化了好久结果还是 40pts(-13:04:29),我**了。
12:36 写了个 T4 的错解,能过部分分 40pts,然后就开摆了。
后注:在 yuantiji 找到了 [T3](https://codeforces.com/problemset/gymProblem/102994/B);T4 是 World Final 2015 的 K(P6914)。
最后 100+100+40+40=280pts,还是机房最高分。qwq

电子草稿:

~~什么时候偷偷塞了一个投稿至 WC2025 游记的官方合集啊,投了。~~
其实并没有,过几天学校集训完再交吧。
### Day 5
顺带一提,洛谷 R2e8 有 99% 的概率在今天产生。
~~(除非洛谷爆了~~
补昨天 T3。
```cpp
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5,mod=1024333327;
map<string,char>mp;
int lft[N];
int hsh[N];
int p10[N];
int hs(int l,int r){
return (hsh[r]-(hsh[l-1]*p10[r-l+1])%mod+mod)%mod;
}
int cf[N];
bool check(int t,int nw){
//lft[nw] ~ lft[nw]+nw-1
return hs(lft[nw],lft[nw]+nw-1-t)==hs(lft[nw]+t,lft[nw]+nw-1);
}
signed main(){
mp["do"]='1';mp["re"]='2';mp["mi"]='3';mp["fa"]='4';mp["sol"]='5';mp["la"]='6';mp["si"]='7';
p10[0]=1;
for(int i=1;i<N;i++)p10[i]=(p10[i-1]*10)%mod;
ios::sync_with_stdio(0);cin.tie(0);
int n;cin>>n;
string s;
for(int i=1;i<=n;i++){
char c;cin>>c;
string x;cin>>x;
lft[i]=lft[i-1];
if(c=='p'){
s=mp[x]+s;
lft[i]--;
}else{
s+=mp[x];
}
}
s=' '+s;
for(int i=1;i<=n;i++)lft[i]-=lft[n]-1;
for(int i=1;i<=n;i++){
hsh[i]=(hsh[i-1]*10+s[i]-'0')%mod;
}
for(int i=1;i<=n;i++){
cf[i]++;
int l=i,r=n;
while(l<r){
int mid=(l+r+1)>>1;
if(check(i,mid)){//在 mid 时刻存在 i 周期
l=mid;
}else{
r=mid-1;
}
}
cf[l+1]--;
}
for(int i=1;i<=n;i++)cf[i]+=cf[i-1];
for(int i=1;i<=n;i++)cout<<cf[i]<<"\n";
return 0;
}
```
现在是晚上 18:10,看来 2e8 就在今天了,我猜中了!!!11
18:12 199986890
18:14 199987304
18:16 199987680
18:18 199987913
18:25 199989230
18:33 199990610
18:35 199991096
18:38 199991557
18:41 199992196
18:44 199992894
18:47 199993308
我们在猜 19 点前能不能达到 2e8(
还是 18:47 199993617
提交速度越来越快了,说不定可以 19 点前呢?过一会就知道了——
19:06。
恭喜洛谷达成 2e8 评测!
got R199999949.
也成功抢到了管理帖的第一啊:<https://www.luogu.com.cn/discuss/1046682>
诶不对我就是管理(
### Day 6
今天学校比赛 T1 是原,P4071。困难题,感觉可以升绿啊。
奋战一个半小时终于写出代码,再过一个小时后发现我们学校 OJ 就有这道原没有隐藏,于是交了一遍,过了。
```cpp
#include<bits/stdc++.h>
using namespace std;
#define int long long
// m 个满足的情况 n 选 m
// 剩下 n-m 个 不满足的情况 f(x) 则 f(x) = f(x-1)*x + (-1)^x 原因未知,找规律
// f(0) = 1
const int N=1e6+5,mod=1e9+7;
int f[N];
int jc[N];
int ksm(int a,int b){
int s=1;
while(b){
if(b&1)(s*=a)%=mod;
(a*=a)%=mod;
b>>=1;
}
return s;
}
int C(int n,int m){
// n xuan m
int div=(jc[n-m]*jc[m])%mod;
return (jc[n]*ksm(div,mod-2))%mod;
}
signed main(){
ios::sync_with_stdio(0);cin.tie(0);
f[0]=jc[0]=1;
for(int i=1;i<N;i++){
jc[i]=(jc[i-1]*i)%mod;
f[i]=(f[i-1]*i+((i&1)?-1:1))%mod;
}
int t;cin>>t;
while(t--){
int n,m;cin>>n>>m;
cout<<(C(n,m)*f[n-m])%mod<<"\n";
}
return 0;
}
```
10:40 / 11:07 / 12:04 交了三次 T2,都全过了样例,但是分别拿了 37.5 / 30 / 50 分,最后属于是 T2 挂了 50 分。T2 样例很弱,还有人样例全过挂了 100 分。T1 也有样例全过挂 90 分的。T2 是原创题,所以不多说了。
赛后:我草我没开 long long 不然能多 20pts。
T3 20 分很好拿,11:47 交了一发走了。
至于今天的 T4 嘛,前天比赛下发的 T4 std 是错的,原来是今天的 T4。交一发就拿到了 100pts(
去掉 T4 以后因为 T2 挂了 50 分所以不是 rk1。

电子草稿:

后记:T2 赛时重传了数据,结果新加的数据出锅了,输入的 T=1 结果输出数据是很多组答案。所以实际上我的代码只要加 long long 就是 100pts 的。。。
样例全过但 0pts 的那位同学,是因为他做法写假了,但是因为多测没清空,导致输出的结果在下发的两个小样例和一个大样例都恰好对了。。
T4 做法很神奇,因为有原题,这里就作习题留给读者。

std:
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
typedef array<int, 3> AI;
int lx, ly;
int id[2][2];
vector<PII> path[4];
vector<AI> ans;
int gid(int x, int y){return x * 2 + y;}
int gid(PII x){return gid(x.first, x.second);}
void move(int t){
if(t == 0){ //up
path[id[1][0]].push_back({lx - 1, ly + 1});
path[id[1][1]].push_back({lx - 1, ly});
swap(id[1][0], id[1][1]);
swap(id[0][0], id[1][0]); swap(id[0][1], id[1][1]);
lx--;
}
else if(t == 1){ // right
path[id[0][0]].push_back({lx + 1, ly + 2});
path[id[1][0]].push_back({lx, ly + 2});
swap(id[0][0], id[1][0]);
swap(id[0][0], id[0][1]); swap(id[1][0], id[1][1]);
ly++;
}
else if(t == 2){ // down
path[id[0][0]].push_back({lx + 2, ly + 1});
path[id[0][1]].push_back({lx + 2, ly});
swap(id[0][0], id[0][1]);
swap(id[0][0], id[1][0]); swap(id[0][1], id[1][1]);
lx++;
}
else if(t == 3){ // left
path[id[0][1]].push_back({lx + 1, ly - 1});
path[id[1][1]].push_back({lx, ly - 1});
swap(id[0][1], id[1][1]);
swap(id[0][0], id[0][1]); swap(id[1][0], id[1][1]);
ly--;
}
else assert(false);
}
namespace MinS{
const int N2 = 15;
int v[N2][N2][2];
int dx[] = {-2, -2, -1, 1, 2, 2, 1, -1};
int dy[] = {-1, 1, 2, 2, 1, -1, -2, -2};
int n;
bool dfs(int dep, int x, int y, int t){
v[x][y][t] = dep;
if(dep == n * n * 2 - 4){
if(abs(x - 1) == 2 && abs(y - 1) == 1) return 1;
if(abs(x - 1) == 1 && abs(y - 1) == 2) return 1;
v[x][y][t] = 0;
return 0;
}
if(!v[x][y][t ^ 1]){
if(dfs(dep + 1, x, y, t ^ 1)) return 1;
if(x <= 2 && y <= 2){
v[x][y][t] = 0;
return 0;
}
}
for(int k = 0; k <= 7; k++){
int tx = x + dx[k], ty = y + dy[k];
if(tx >= 1 && ty >= 1 && tx <= n && ty <= n && !v[tx][ty][t]){
if(dfs(dep + 1, tx, ty, t)) return 1;
}
}
v[x][y][t] = 0;
return 0;
}
void work(int S, int base){
n = S;
v[n][1][0] = v[n][1][1] = v[1][n][0] = v[1][n][1] = -1;
assert(dfs(1, 1, 1, 0));
for(int k = 1; k <= n * n * 2 - 4; k++){
int x = 0, y = 0, t = 0;
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
for(int tt = 0; tt <= 1; tt++){
if(v[i][j][tt] == k){
x = i;
y = j;
t = tt;
break;
}
}
if(x) break;
}
if(x) break;
}
ans.push_back({x + base, y + base, t});
if(x <= 2 && y <= 2 && v[x][y][t ^ 1] == v[x][y][t] + 1){
int id = gid(x - 1, y - 1);
for(auto [xx, yy] : path[id]) ans.push_back({xx, yy, t});
for(auto i = path[id].rbegin(); i != path[id].rend(); i++){
auto [xx, yy] = (*i);
ans.push_back({xx, yy, t ^ 1});
}
}
}
}
}
int n;
int main(){
cin >> n;
for(int i = 0; i <= 1; i++){
for(int j = 0; j <= 1; j++) id[i][j] = gid(i, j);
}
int f = 4;
if(n % 4 == 2) f = 6;
lx = ly = (n - f) / 2 + 1;
for(int i = (n - f) / 4, sz = f + 4; i >= 1; i--, sz += 4){
move(0);
move(0);
for(int j = 5; j < sz; j++) move(1);
move(2);
move(1);
for(int j = 4; j <= sz; j++) move(2);
for(int j = sz - 2; j > 1; j--) move(3);
move(0);
move(3);
for(int j = sz - 3; j >= 1; j--) move(0);
}
MinS::work(f, (n - f) / 2);
assert(ans.size() == n * n * 2 - 4);
for(auto [x, y, t] : ans){
x = n - x + 1;
cout << x << " " << y << " " << t << "\n";
}
return 0;
}
```
T3 原题是 CF1534G(我草那这场跨度有点大啊,前两题都是绿以下的,T3 T4 是黑),知道之后反手动用职权给那题加了个 slope trick 的标签。
别忘了认领领题解翻新计划。
### Day 7
要结束啦。
我是说学校的年前集训。今天还会考最后一次,听说会很难(
写完 T1,浅浅的做 T2 发现做法假了,样例太弱,正解树上背包不想写了,开摆了。
T1 P5340
T2 P4516
T3 没找到,好像是 QOJ 的
T4 AT_agc043_c
绿紫紫紫,NOIP 2022 极致体验。
因为摆烂了所以没什么赛时电子草稿。
然后就没了?大家也都回来了。