HA省OIer“NOIp“2019游记(蒟蒻最后的OI与高中生涯)

别问我为什么晚了一年才发,问就是懒
其实是现在才没有那种心理上的抵触,让我能够正常地去回忆起那段时光。
现在想想,那正是一段忐忑的历程,无论是过程上还是心理上。
虽然时隔一年,但是我对那一段时光真的是每一个细节都记得清清楚楚。

简要介绍:

我是20届,现在在某211带学读壬工智能
其实是因为高三节奏真的太快,再加上NOIp2018翻车,以至于心态一直不好,当时各种感觉交织在一起,以至于现在会想起NOIp2018之后的事情总会感觉有一种不真实感,只对一些对我影响比较大的事情,我才有一种真实感。
NOIp2018翻车后,真的是感觉一种前所未有的绝望感与无奈感(也就是在那段时间,我认识了爱酱,从此进入了DD的世界,感谢爱酱给我了前进的动力),”我明明实力是足够的,就是因为考试时候太自信了,以为能写出正解,没打暴力,然后正解没写出来,所以翻车,要是打了暴力,是绝对可以省一的“这种感觉一值伴随了很长一段时间。竞赛的失利与文化课的极度薄弱,已经来自同学家长老师的压力,几乎让我疯掉。
大概是经历了一个学期的恶补文化课,靠着爱酱给予的心理上的慰藉,我竟然撑下来了,然后文化课成绩也差不多可以了
在高三上学期开学,我觉得,是时候重启OI生活了!
然而,阻力比我想象的要大很多,我的班主任,家长,极力极力极力反对我。我可以理解他们的心理,但是,我觉得只有我自己对自己的实力最了解(可能有些自大,但是似乎确实是这样),我决定去赌一把。
然后我就经历我认为高中生涯中最艰难的时光,一边兼顾文化课,一边偷偷去机房复习,对于几乎没有额外时间的我,只能中午午休的时候去机房,忍耐着极其强烈的困意,去复习,然后在午休快要结束的时候跑回班稍微睡一小会。总之就是非常艰难,那一段时间,我知道了orangestar,鹿乃,阿良良等p主与唱见,TA们的歌真的在我绝望之时给了我动力,在我烦躁之时让我平静。

接下来就是重头戏了

DAY0:体育考试与”逃亡“

因为去参赛这件事情并没有给家人和老师说,所以,我做出了一个很危险的决定:偷偷溜出校门去考试。这是我第一次逃学,我已经做好吃处分的准备了。
提前和一个高二的学弟S商量好,让他帮我订一个房间,后来就非常就愉快和一个隔壁班的OIer T,学弟订了个三人间。S
这一天是体育测试,我准备和一个同学W共用假条(把他的假条上也写上我的名字),我提前把东西都整理好,下午跑完了一千米之后,稍作休息(跑完感觉快要吐了),给班里的一个同学说让W回来后去机房,然后我偷偷跑到机房,等待着W测试完。我清楚地记得,在机房里遇到了一个学弟,我心情十分紧张,几乎无法做任何事,恰好,那位学弟想听一听tarjan算法,然后我就给他讲了讲,在这个过程中,我的紧张感逐渐消散…
终于,W来到了机房,我最后检查了一下书包,然后直奔校门,用假条骗过保安,然后快步离开,我们一路快步走到体铁站,没想到的是,在过安检的时候,我的蝴蝶刀被扫出来了,没有开刃也不然带,然后就被没收了,还被拍了照,当时我的心态简直快要炸裂,不过还好有W的陪伴,我没有彻底崩溃。
在地铁上,我的大脑一片混乱,想着这时候老师应该发现我跑路了,家长应该也知道我不见了,想着回学校后会经历什么,应该会被狠狠地训一顿,然后公开处刑吧…
为了平复紧张地心情,我便打了会方舟。
W一直陪着我到终点,然后他便回家了,我去找提前订好地宾馆,在路上,我把音乐调到最大声,希望能够平静我内心的无限恐惧与慌张,我现在还能会想起当时听的是jump for joy和绝体绝命,hand in hand 。然后大概过了半个小时,我总算摸到了宾馆,学弟S给我开了门,躺在床上后,一股无比巨大的虚无感席卷全身…
大概在床上发了一个小时呆,我便起身,去复习了复习模板,之后就是一直在 看模板,打模板,一直到了11点。
然后我们就准备睡觉了,然后我的紧张感一直让我无法入眠,我清楚的记得窗户外发生了什么,就这样一直到了第二天清晨…

DAY1:

伴随着miku的《爱之诗》,我的意识被拉回了现实,然而我的紧张感还没有消退,于是便去准备去洗个澡,然而并没有热水,所以我就洗了头,收拾一下东西,买了包子和豆浆,便前往考场,一路上,我还试图用音乐去安抚快要崩溃的内心。
豆浆袋质量太差了,竟然捏爆了
总是就是进入了考场,下载了解压包,输入解压密码,把pdf拖到chrome…
T1:噔 噔 咚,第一看竟然不会做!
T2:不会
T3:不会
然后就有点慌了,喝了一口咖啡,便开始手动演算,大概过了10min,摸索出来结果了,然后打了代码,样例全过,便准备开始做第二题了(结果没开unsignedlonglong)。
~附上95分屑代码

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int n;
long long k;

void solve(int n,long long k)
{
	if(n==1){
		if(k==0) printf("0");
		if(k==1) printf("1");
		return ; 
	}
	if(k<(1LL<<(n-1))){
		printf("0");
		solve(n-1,k);
	}
	else{
		printf("1");
		solve(n-1,(1LL*1<<n)-1-k);
	}
}


int main()
{
	freopen("code.in","r",stdin);
	freopen("code.out","w",stdout);
	scanf("%d%lld",&n,&k);
	solve(n,k);
	return 0;
}

T3本来想拿部分分的,然后代码打了好长时间,才发现算法有误,然后便果断切T2
大概是想清楚部分分的思路了,但是仍然样例过不了,就这么一直持续了好长时间,然后发现是某个地方处理错了,然而已经没有时间了,只能打包好交了。
去宾馆旁边恰了一顿郃烙面,接着便是最难熬的下午了,我觉得DAY1爆炸,应该是没有希望了。
于是就用学弟的电脑打了一下午csgo,希望麻痹内心,又看了猪头少年的剧场版,企图熬过这一段时间。
傍晚,W给我发短信,说班主任找到他,让我联系家长, 然后班里的别的同学也发QQ,让我赶紧去联系一下。没办法,我只能鼓起勇气给他们打电话,出乎我意料的是,他们并没有训我,让我好好考试,从那一刻,我彻底的放松了,并没有想我想象的那样严重,我似乎觉得,一切最终都会好起来。
于是便安详地入睡了

DAY2:

与昨天早上一样的操作 (只是豆浆袋没有炸)
看了半天题,发现与树有关的题还是不会做 (与树有关的算法全部木大)
然后就开始手推DP,我感觉这道题和我之前做过的题很像,然后就一直推,然后就玄学地推出来了
结果过于激动忘了一个很简单地优化,90分->64分)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;

const int maxn=4*1e7;

int a[maxn],n,type,f[maxn],k[maxn],cnt,now;
long long sum[maxn],ans;

int main()
{
//	freopen("partition.in","r",stdin);
//	freopen("partition.out","w",stdout);
	scanf("%d%d",&n,&type);
	for(int i=1;i<=n;++i){
		scanf("%d",&a[i]);
		sum[i]=sum[i-1]+a[i];
	}
	k[1]=1;
	for(int i=2;i<=n;++i){
		for(int j=1;j<=i;++j){
			if(sum[j-1]-sum[k[j-1]-1]<=sum[i]-sum[j-1]){
				k[i]=max(k[i],j);
			}
		}
	}
	for(int i=n;i>=1;i=k[i]-1)
		ans+=1LL*(sum[i]-sum[k[i]-1])*1LL*(sum[i]-sum[k[i]-1]);
	printf("%lld\n",ans);
	return 0;
}

然后T3!!!
竟然是卫宫家今天的饭!!!!
总是就是打了个暴力加玄学优化
32分

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const long long mod=998244353;

int n,m,a[205][2005],usedx[2005],use[2005],num,cnt;
long long ans;

void dfs(int x,int y,long long tmp,int tot)
{
	tmp=(tmp*a[y][x])%mod;
	if(tot==num){
		ans=(ans+tmp)%mod;
		//printf("finish %d %d %d\n",x,y,++cnt);
		return;
	}	
	if(tot+n-y<num) return;
	for(int i=y+1;i<=n;++i)
		for(int j=1;j<=m;++j){
			if(a[i][j]!=0&&usedx[j]+1<=(num/2)){
				usedx[j]++;
				dfs(j,i,tmp,tot+1);
				usedx[j]--;
			}
		}
}

void solve()
{
	for(int i=1;i<=n;++i)
		for(int j=1;j<=m;++j)
			scanf("%d",&a[i][j]);
	for(num=2;num<=n;++num)
		for(int i=1;i<=n-num+1;++i)
			for(int j=1;j<=m;++j) 
				if(a[i][j]!=0){
					usedx[j]++;
					dfs(j,i,1LL,1);
					usedx[j]--;
			}
	printf("%lld\n",ans);
}

int main()
{
//	freopen("meal.in","r",stdin);
//	freopen("meal.out","w",stdout);
	scanf("%d%d",&n,&m);
	if(n<=10){
		solve();
		return 0;
	}
		if(m==2){
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j){
				if(i!=j)
				 ans=(ans+a[i][1]*a[j][2])%mod;
			}
	}
	if(m==3){
		for(int i=1;i<3;++i)
			for(int j=1;j<=n;++j) 
				for(int k=1;k<=n;++k){
					if(j!=k) ans=(ans+a[j][i]*a[k][i+1])%mod;
				}
		for(int j=1;j<=n;++j) 
			for(int k=1;k<=n;++k){
				if(j!=k) ans=(ans+a[j][1]*a[k][3])%mod;
			}
		for(int i=1;i<=n;++i)
			for(int j=1;j<=n;++j)
				for(int k=1;k<=n;++k){
					if(i!=k&&i!=j&&j!=k){
						ans=(ans+a[i][1]*a[j][2]*a[k][3])%mod;
					}
				}
	}
	return 0;
	
}

剩下一题不会做,就没打。

然后我的OI生涯就这么结束了,充满了不真实感。

之后的事情就…
首先我如愿以偿地拿到了省一,然后就得知了自招取消,当时真的心情从巅峰跌倒了谷底,不过最终还是缓了过来~~(谢谢老婆们!)~~
最终高考成绩还可以,省排1.2w/110w,来到了帝都一个还行的211
现在在校ACM队里
以后会持续更新与算法相关的内容的
大概就是这些了,真的是一段充满了各种情感的一段时间,感谢OI给我带来的一切 (以及老婆们)

  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值