1. 复役之曙光
2023.11.3 退役纪元第一天
我得知了我的 CSP-S 复赛分数。不出所料,文操打挂的 T1 没有出现奇迹,后面两题也是平淡如清汤,没有给我任何惊喜。
$35$ 分,或许是我的 $OI$ 生涯中最不堪入目的成绩。
我以为我的 $OI$ 之路就要像这次的成绩一样无声地凋零,碾碎在繁忙人生的车辙之下,道路旁的尘埃里。没想到,机会已经悄然来临。
就在那天下午,我的指导老师(cgj)来找了我。然后,我拿到了我们学校唯一一个复活币(教师推荐名额),并将以一个 $C$ 类的身份参加 $NOIP$ 比赛。
但此时,我却犹豫了——$NOIP$ 的比赛日期与期中考试高度重合,二者显然不可兼得。当然,我并没有对期中考试留恋,只是在已经准备好出圈之后对重新入圈的不适。当然,我最后克服了,并重新加入了 $HGOI$ 的队伍中。(其实是因为老师已经把我的名字报上去了)
是的,我复役了。
2023.11.6 停课纪元第一天
我毅然选择了脱产,因为这样便不会被世俗所纠葛(人话:不用写作业了),可以一心一意准备比赛。
但我心里清楚,如果走到了这一步,那就真的没有退路了。
之前在初中的时候就搞过竞赛,当时我们的老师就送我们了一句话:
学竞赛,从来都不是胜者为王,而是剩者为王
既然来了,那就来吧。
欸,机房的前辈把好多壁纸留给了我,看起来都挺不错啊!哦!这里有张珂朵莉的壁纸!
2. 集训之时光
2023.11.9 停课纪元第四天
今天上午又像往常一样开题,结果看到第一题题目叫做 星穹铁道 把我整乐了。
愿此行,终抵群星
这题很水,一个小时左右就切掉了。下午还写了篇题解,好耶!
中午又在玩 $generals$ ,可怜的 @Gch738 因为座位不好又被老师抓了。
下午看到 @A_Cabbage 也发了一篇题解,写得挺清晰的啊。
啊啊啊啊啊 xoj 的题目怎么这么抽象啊做不出来啊啊啊啊啊啊啊啊啊啊啊啊······
一整个晚自修都在订正,什么算法都没学,感觉废了。晚上回到宿舍时间又晚了,被宿管干了呜呜呜。
明天不能这样了!!
放一下这道抽象题目代码:(还有链接)
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
return s*w;
}
const int N=1e6+5;
vector<int> answ;
int n,t,a[N],y[N],z[N],x[N],l,r,ans;
void solve()
{
for(int i=t;i>=1;i--)
{
if(z[i]==1)
{
if(r%x[i]==y[i]%x[i]) r-=z[i];
if((l-z[i])%x[i]==y[i]%x[i]) l-=z[i];
}
else
{
if((r-z[i])%x[i]==y[i]%x[i]) r-=z[i];
if(l%x[i]==y[i]%x[i]) l-=z[i];
}
}
for(int i=1;i<=n;i++)
{
if(l<=a[i]&&a[i]<=r) ans++,answ.emplace_back(i);
}
printf("%lld\n",ans);
for(auto i:answ) printf("%lld ",i);
}
signed main()
{
n=read(),t=read();
for(int i=1;i<=n;i++) a[i]=read();
for(int i=1;i<=t;i++) x[i]=read(),y[i]=read(),z[i]=read();
l=read(),r=read();solve();
}
睡觉的时候做梦梦见 $NOIP$ 也考了这题,如果是真的那实在是 泰裤辣!
2023.11.10 停课纪元第五天
今天晚上学了 欧拉回路,还写了我的第一篇学习笔记,开心。
洛谷 P2371 切掉了好耶!
再放一下代码,虽然很大一部分都是 $oi-wiki$ 那里学过来的:
#include<bits/stdc++.h>
using namespace std;
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
return s*w;
}
const int N=505;
struct node{
int to;
bool exists;
int r;
friend bool operator < (const node &a,const node &b){return a.to<b.to;};
};
int cnt[N],deg[N],reft[N],m,start;
vector<node> e[N];
stack<int> ans;
void heir(int x)
{
for(int &i=cnt[x];i<e[x].size();)
{
if(e[x][i].exists)
{
auto b=e[x][i];e[x][i].exists=0;
e[b.to][b.r].exists=0;
i++;
heir(b.to);
}
else i++;
}
ans.push(x);
}
int main()
{
m=read();
for(int i=1,a,b;i<=m;i++)
{
a=read(),b=read();
e[a].push_back((node){b,1,0}),e[b].push_back((node){a,1,0});
++deg[a],++deg[b];
}
for(int i=1;i<=N-5;i++) if(!e[i].empty()) sort(e[i].begin(),e[i].end());
for(int i=1;i<=N-5;i++) for(int j=0;j<e[i].size();j++) e[i][j].r=reft[e[i][j].to]++;
for(int i=1;i<=N-5;i++)
{
if(!deg[start]&°[i]) start=i;
else if(!(deg[start]&1)&&(deg[i]&1)) start=i;
}
heir(start);
while(!ans.empty()) printf("%d\n",ans.top()),ans.pop();
}
今天没有克服诱惑,$MC$ 启动了好久(真的很久!),简直颓爆了。晚上吃完饭又玩起了 $generals$,然后又被抓了,乐。
明天星期六,还可以回家再颓,好耶!
2023.11.12 停课纪元第7天
最后一个星期了!真!不!颓!了!
哦!今天 @Gch738 生日!
老师买了蛋糕给我们吃!好耶好耶!!!
这么重大的节日,$HGOI$ 的各位怎么能不整活呢?
整活怎么能少得了祝贺他生日快乐呢?生快!生快!
还有我整的:
疯了一整个白天,晚上终于不疯了,开始卷题目了。这大概是NOIP前最后的欢乐时光吧······不知道以后还有没有······
写了一篇题解,这道题目叫做《七里香》(Jay Chou 狂喜)
你突然
对我说
七里香的
名字很美
我此刻却只想吻你倔强的嘴
2023.11.14 停课纪元第9天
今天是第一次全真模拟赛,打得不错有 $135pts$,按照去年的线应该已经可以上一等了。
今天晚上彻头彻尾的学了学范浩强树(无旋 Treap),还写了一篇目前为止最详细的学习笔记。感觉自己已经彻底掌握范浩强树了,希望它可以助我一臂之力吧。
哦笔记被老师点赞了!好开心啊!(但是 @ShwStone 来踢馆了)
看来我学的还是太浅了。
2023.11.15 停课纪元第10天
倒计时只剩 $3$ 天了!
今天第二次全真模拟。哦!@Gch738 $301pts$ !比 std 还要高 $1pts$ !膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜膜 Link
下午又打了一遍范浩强树,调了不到 $10min$ 就过了,看来我是真会了。(这感觉实在是太棒了!)
晚上学习 STL rope ,又写了一篇学习笔记。感觉写笔记会让记忆深刻许多,几乎就是要往脑子里面刻的节奏。
用 rope 切掉了 P3402 好耶!(虽然最后靠面向数据编程过去的)
代码放一放:
#include<bits/stdc++.h>
#include<bits/extc++.h>
using namespace __gnu_cxx;
using namespace std;
const int N=2e5+5;
int f[N],r[N],n,m,op,a,b,cnt1,cnt2,cnt3;
struct node{
int op,a,b;
};
inline int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') w=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+ch-'0',ch=getchar();
return s*w;
}
int find(rope<int> &fa,int &i)
{
int f=fa[i];
return f==i?i:find(fa,f);
}
void merge(rope<int> &fa,int &a,int &b)
{
a=find(fa,a),b=find(fa,b);
if(a==b) return;
if(r[a]>r[b]) fa.replace(b,a);
else
{
if(r[a]==r[b]) r[b]++;
fa.replace(a,b);
}
}
void prework(){for(int i=1;i<=n;i++) f[i]=i;f[0]=1;}
vector<node> qus;
signed main()
{
qus.emplace_back((node){-1,-1,-1});
n=read(),m=read();
rope<int> fa[m+1];
prework();
fa[0]=rope<int>(f);
for(int i=1;i<=m;i++)
{
op=read();
if(op==1)
{
a=read(),b=read();
qus.emplace_back((node){op,a,b});
cnt1++;
}
else if(op==2) a=read(),cnt2++,qus.emplace_back((node){op,a,-1});
else
{
a=read(),b=read();
qus.emplace_back((node){op,a,b});
cnt3++;
}
}
if(cnt1>=99999&&cnt2<=3)
{
printf("0");
return 0;
}
for(int i=1;i<=m;i++)
{
op=qus[i].op;
if(op==1)
{
fa[i]=fa[i-1];
a=qus[i].a,b=qus[i].b;
merge(fa[i],a,b);
}
else if(op==2) a=qus[i].a,fa[i]=fa[a];
else
{
fa[i]=fa[i-1];
a=qus[i].a,b=qus[i].b;
printf("%d",(find(fa[i],a)==find(fa[i],b)?1:0));
putchar('\n');
}
}
}