2021-CSP-S第二轮游记

大概就是这样

考试前的最后几次模拟赛打的还啥都不是。
去郑州的路上我才明白,为什么去年的时候我们说说笑笑,而学长们一句也不说。
但是我努力给自己打气,如果难度和去年的一样,应该打个两百加没太大问题吧(然后就自己给自己毒奶死了)

Day-1

上午在机房还是看看之前的代码,博客啥的,最后临出发时的拍照太自闭了,我因为挑了个最不起眼的位置站而被调整到了最起眼的位置去,肥肠自闭,但也无伤大雅。把发的奶都给了杰哥,最后再涨一波人品。坐到了最前排,还看了看QQ上学长的祝福
2021-CSP-S第二轮游记_第1张图片2021-CSP-S第二轮游记_第2张图片2021-CSP-S第二轮游记_第3张图片
手上还戴着跟我哥情侣款的手链,我以为自己BUFF叠满了,应该很安心很平静,不出大锅打出好成绩。车上听听歌睡睡觉,最后还带个好头让宁神拿麦克风唱歌(莫非是在这里把RP丢完了?),给帆神打视频电话的时候帆神还没接,啧啧啧。其实也蛮快乐的。

结果到了晚上,床和枕头都很软,翻来覆去怎么也睡不着觉,早上却依然六点多自然醒。并不能说完全清醒了,但确实是睡不着了。


当天

上午复习复习了一些板子,然后看了看自己的博客以及之前模拟赛觉得比较有意思的题,中午吃饭没吃下多少。
去楼下集合还迟到了 5min
虽然有些困意了,其实一到楼下感觉还良好。


考场上

6神监考我们考场,一开始点开 DEV 的时候会弹出来奇怪的窗口,于是6神给我换了个位置,于是还是会弹出那个东西,所以我猜测应该没有什么问题,而且新的座位背后就是窗户,通风挺好的。所以也就不再麻烦6神了。
花了 30min 左右把题遍历了一遍,最肯定的是 T 4 T4 T4 不可做 ,然后就开始搞 T 1 T1 T1 20 20 20 分暴力搞完的时候考试算是才开始一个小时。

然后写 T 3 T3 T3 的暴力 28 28 28 分,在大法师和二进制枚举之间选择了二进制枚举,并且通过特殊的处理保证满足题中《字典序最小》的条件。花费了不到半个小时的时间吧。

感觉难度比去年高出来好多啊,太离谱了, T 2 T2 T2 15 15 15 分的 O ( 3 N ) O(3^N) O(3N) 暴力写的有些挂了,前前后后花费了快 1 h 1h 1h 的时间。莫名其妙的,不管怎么改,两个样例中总要有一个过不去。

然而现在还剩 1.5 h 1.5h 1.5h 以上的时间,看着 T 1 T1 T1 的数据范围, O ( N 2 ) O(N^2) O(N2) 就能 40 40 40 分。可我这时候却怎么也想不出来,于是开始肚疼(不是吃坏肚子或者饿了,就是单纯的肚疼而非肠胃),然后感觉头上冒细汗,努力让自己冷静点就会好很多,于是看到 T 1 T1 T1 满足的一个性质,想读入的时候直接放到堆里,然后前缀和差分之类的瞎搞,但是又想不通这样维护出来后是否满足题意,又如何取出最佳方案。然后就又想到去年的时候二分就能水好多分,但是这道题明显不具备单调性。然后就又想到三分,但是由于不想在无用的代码上浪费时间,我随手构了个小数据就能卡的死死的。或者直接用堆+pair维护每个区间的起点和终点?肚疼的程度逐渐加深了。

然后就开始想办法能不能直接搞个 T 2 T2 T2 的中档分,想到了区间DP+组合计数,但是如果想拼成题中给的,我又想着是不是还得用 K M P KMP KMP ,但是时间复杂度又难受了,想办法优化优化推个更好的式子,但是没有搞出来。

太自闭了,根本搞不懂每道题都是在考什么。


回去的路上

自己坐在最前排想着接下来要攻什么专题,宁神又唱了两首歌,我直接怼脸上录像,胳膊酸死了,然后用流量给帆神发过去。看着QQ群里室友的鼓励,我真搞不懂考场上究竟是怎么回事啊。别人估的分远比我的高,太难受了,肚疼一路。


2021-CSP-S第二轮游记_第4张图片
太搞心态了,T2在两个oj分别骗到4分和10分,T1只有20,T3在二进制枚举的for循环写的i=1,改成i=0后第一档的 28 28 28 分就稳了,于是发现自己的写法会被原本就是回文串的数据卡掉。


再复盘一下

T 1 T1 T1 O ( N 2 ) O(N^2) O(N2)很好写,当时考场上想到的用堆+pair维护每个区间的起点+终点的想法就该能 40 40 40 分的,但是此时的堆没有意义,还不如 结构体+ s o r t sort sort 好。
(最难受的是我考场上太难受了,而没有去写这个 40 40 40
可见心态放平的重要性,明明没有问题,却不能相信自己)
这时候我们的进入时间是单调递增的,应该敏感些想到用二分。然后我就用结构体存,手写二分,但是又不会看是不是取出来过了。所以这时候就又得想到用 set 了,相当于一个能用指针表示下标的堆,也就是说可以用 STL 的二分了。
然后时间复杂度应该就是 O ( N ∗ l o g N ) O(N*log_N) O(NlogN)

#include
using namespace std;
set<pair<int ,int > >a ,b ;
int ans,num[100010],num2[100010],cun,m1,m2,x,y,n,tot,len;
int main()
{
	scanf("%d%d%d",&n ,&m1 ,&m2);
	for(int i=1;i<=m1;i++)
	{
		scanf("%d%d",&x ,&y);
		a.insert(make_pair(x,y));
	}
	for(int i=1;i<=m2;i++)
	{
		scanf("%d%d",&x ,&y);
		b.insert(make_pair(x,y));
	}
	tot = 1;
	len = a.size() -1;
	set<pair<int ,int > >::iterator it4 = a.begin();
	cun = (*it4).second;
	a.erase(*it4);
	num[tot] =0;
	a.insert(make_pair(100000010,100000010));
	//在这个set的最后放一个超过数据范围的数,来防止空指针
	while(len -- )
	{
		set<pair<int ,int > >::iterator it = a.lower_bound(make_pair( cun,0 ) );
		if(it != a.end())//如果现在指针指的不是最后一个
		{
			cun = (*it).second;
			++ num[tot];
			a.erase(it);
			continue;
		}
		++ tot;
		//tot表示给了tot个廊桥
		//num[tot]是给tot个廊桥能停多少飞机
		num[tot] = num[tot-1];
		set<pair<int ,int > >::iterator it2 = a.begin();
		cun = (*it2).second;
		a.erase(it2);
		++ num[tot];
		if(tot>n) break;
	}
	tot = 1;
	len = b.size() -1;
	set<pair<int ,int > >::iterator it3 = b.begin();
	cun = (*it3).second;
	b.erase(*it3);
	num2[tot] =0;
	b.insert(make_pair(100000010,100000010));
	while(len -- )
	{
		pair<int , int >linshi;
		linshi=make_pair(cun,0);
		set<pair<int ,int > >::iterator it = b.lower_bound(linshi);
		if(it != b.end())
		{
			cun = (*it).second;
			++ num2[tot];
			b.erase(it);
			continue;
		}
		++ tot;
		num2[tot] = num2[tot-1];
		set<pair<int ,int > >::iterator it2 = b.begin();
		cun = (*it2).second;
		b.erase(it2);
		++ num2[tot];
		if(tot>n) break;
	}
	ans=-1;
	for(int i=0;i<=n;i++)
	{
		ans=max(ans,num[i]+num2[n-i]);
	}
	printf("%d",ans);
	return 0;
}

吐槽下这两年csp只要把各种二分都掌握就能拿不少分了

T3

我本来还是想找一些性质的,比如选了某个后会有哪个是必选的这种,然后把题中

将序列 a 的开头元素加到 b 的末尾,并从 a 中移除。
将序列 a 的末尾元素加到 b 的末尾,并从 a 中移除。

看成了

将序列 a 的开头元素加到 b 的末尾,并从 a 中移除。
将序列 a 的末尾元素加到 b 的开头,并从 a 中移除。

当时大概推了两三分钟的性质没搞出来,然后就很烦,觉得题对我来说太难了,然后又读了一遍题发现我看错了,本来那两三分钟其实并不是什么大事,(虽然也该是分秒必争的

读对题后肥肠紧张没有再去推那个性质,而直接打暴力,并且打完也忘了推性质或者扣数据验证暴力,所以现在觉得太亏了,这道题还是多测,每组给我来个本身就是回文的,我就直接 G G GG GG 了。

你可能感兴趣的:(比赛,1024程序员节,经验分享)