CSP/NOIP2021:从地上到入土……?【完整版】

\(\Huge\texttt{NOIP RP++}\)

9.11

开坑。

9.16

打印准考证,照片看起来像个hp。

一开始“语言”那一栏写的是“未定义”(我谢谢你 \(\tiny{CCF}\) ),中午重打了一份变成 \(\mathtt{\color{blue}{\text{C++}}}\)

9.15~18

完成了四份初赛卷:

  • CSP-S1 2019 原题
  • 洛谷SCP
  • 启*树模拟赛(被最后一条“树链剖分”完形填空恶心到了)
  • LG2020模拟

\(\color{#5eb95e}{\tt\text{9.19上午}}\)

初赛 RP++!

初心难改赴征程,
赛际为诗励前行。
必念昨宵奋斗码,
胜局将定志当盈!

9.19下午

虽然监考的竟然是初中信息老师,但我并没有交到好运。。。

感慨

鉴于CCF的坑人态势,预计复赛只会更**

这个贴讲出了我想说的话

9.23

My score is 53. My rating is -32.

只能说保佑我复赛加油了

10.4

参加了牛客网模拟赛1。

前1.5h调T1,怎么也不对,后来发现数论结论搞错了,心态炸裂。

result: 5 + 20 + 20 + 12.5。

反思:

  • T1离谱,套壳数论的图论题,其实,曾经想到记忆化搜索,但在发现有些x % p == x会出现无限递归的时候,观察数据范围,就可以往图论方面去想了。

  • 心态调整 + 时间控制!!!

10.5

(似乎OI无关?)

参加化竞国初(JS, B卷)

并且发了一个SB的贴吐槽,被人以为是JC...

10.7

返校没几天,重游基地(信竞专用机房)

10.7

Virtual Participate 牛客模拟赛2

第一道题看似是一个DP,但是其对2取余数的性质导致可以借助奇偶性简化问题,也就是说知道了一个区间内1的个数就可以推出答案是0还是1。

第二道题涉及到数学排列组合,仔细分析,并不复杂(有空隙的填充,把空隙减掉就行了)。不要有畏难情绪。

两次模拟赛总结:

  1. 第一题必须冷静审题+分析。

  2. 第二题有思维含量,尽可能分析问题,不要仅限于暴力分。

10.8~10.16

参加&VP 牛客4场模拟赛,分数一般。

10.22

校运会下午没去,打板子。

\(\color{#e67e22}{\tt\text{10.23}}\)

这个足以说明一切了

去年2h搞到了T1 80',后面疯狂骗分,差点1=,这也是这个钩的来源

今年2h调来调去T1 40',后面连暴力也没心情写

我是个垃圾

沿途照片留念

具体战况:

2:30

试机结束,把桌面背景换成了自制的“防止爆0”Tip。

看看题面:没有去年的大模拟,难度好像还行?

3:30(左右)

拿到T1 40分暴力分并没有那么顺利,改掉了一堆bug。

3:31 ~ 4:30

努力考虑优化。

发现了廊桥数量增加后先前已经停靠的飞机不会被挤出去,但是一直纠结如何确定新增的飞机,甚至弄了离散化。

努力失败。

4:31 ~ 5:15

想打T2暴力,发现样例1怎么输出都是6。

仔细看题面,wtf什么神奇的判定方法?

此时本应该转T3,但我坚持认为T2不会让我送命。

发现了区间DP的影子,努力开始打。

???? ~ ????

先写循环转移,但总是输出0。尝试记忆化搜索,改来改去弄了个RE。

放弃治疗,T3 T4甚至连暴力都不想写。

\(\color{#ad8b00}\boxed{\boxed{{\color{#8e44ad}{\tt \Huge I\ }\color{#e74c3c}{\tt \huge would\ }\color{#e67e22}{\tt \LARGE like\ }\color{#5eb95e}{\tt \Large to\ }\color{#0e90d2}{\tt \large AFO\ }\color{#bfbfbf}{\tt now.}}}}\)

10.26 总结

  1. 对自己过于自信,固守原来的开题模式。
  2. 思维不够灵活。
  3. 心态处理不当,不能发挥最佳水平。

此后,真的是背水一战了。

10.27

大悲,30min写出了T1的AC代码,用的是set

不清楚考场上为什么这么SB

code

10.28 ~ 29

怀着\(\large\mathtt{\text{沉重}}\)的心情AC了CSP-S 2021的部分题目。

10.30

参加学校体测。

跑1km时,第一圈不温不火,第1.5圈由(全局意义的)第二梯队冲到第一梯队,最后被两三位同学反超,但仍然创造了个人新纪录。

力争上游,不负韶华,正是我最后的NOIP应有的模样。


下午打校际模拟赛,题目比较水,但仍然反映出一些问题:

  • 基础问题,™一个tarjan因为把low 写成了dfn调试了20min
  • 策略问题:因为没有大样例,对拍时间较长,甚至出现因为数据生成器写挂了耽搁时间的情况

10.31

学校模拟赛2,竟然创造了历史最高排名,但感觉我只是在别人卡在T2的时候骗到了T3,T4的部分分而已。

经验:

  • 不要盲目写代码,比如T3写了半天的树状数组发现其实差分就够了

  • 数学基础还是不够,排名靠前的就我T2 30分。。。

  • 思维方式不够灵活,老毛病。

  • T1 三元环数学题,注意取补集、通过计算角来间接算三角形的方式。(P6057原题!)

11.5

CSP-S2 2= 石锤

我这一年难道仅仅绕了个圈子吗?

11.6

常镇扬三市模拟赛1

T2一看范围50000就写分块,写一半发现题读错了,立马改写,用bitset,小数据对拍过了,结果发现自己高估了bitset的效率,光荣的TLE......

后面就仓促了,T3暴力差点读错题目,最后还被卡常T了一个点;T4没写完。

经验:

  1. 部分分的合理分析,思维角度的转换。

比如说T2的80pts部分分:

部分分2 
对于每个f[x]建一个vector
然后询问变成询问300次,某个区间里有没有某一个值
在vector里面二分查找
查询300*m*logn

值域具有很强的提示性,启发做题者转换思维角度,从纵坐标集合当中二分找区间。

  1. 战略。

f*** it ! T4 no have time write bao li! i is a anger english mans.

Don't think you can AC T2 after solving T1. Don't think you can easily get 200pts even if it is a practice. You don't have the evidence! In OI, ideas have the most power. If you think you can AC T2, then you write it. However, the computer of the €€£ will not forgive you!

If you keep stuck in T2, then all the OIers participating the match will know the decadence(腐朽) of your programmes!

T2 will be notorious

  1. 审题的重要性。

本人重构了 \(\Huge2\) 次某题的代码(

11.7

常镇扬三市模拟赛2

  1. T2“发明”了一种神奇的单调栈做法(因为正规方法忘了),结果还是挂了分

  2. T3暴力没打满,虽然骗了10分

经验

  1. 对拍数据不能完全随机,要加一点限制条件。

比如T2自己对拍生成的数据有解概率较小,而自己乱搞的单调栈出错情况又很阴险。(我辛辛苦苦写了 \(\Huge1.5h\) ,结果只比暴力多20pts?!!)

upd 11.8 是学校老爷机的问题。。。link

  1. 适时转变思维角度。

T2标算单调队列。。。

以及:把SCC换成链的操作(对于DAG正解)。

  1. 一!定!要!分!类!讨!论!

在空间、复杂度及常数保证的情况下,暴力程序必须作为一个Sub在程序中体现(鬼知道你对拍能不能查出来高级算法有没有写挂)!

  1. 思维方式

证明“最优性”与“可行性”

(upd 11.8)

  1. 常数,快读!(难以保证不会出现把我 \(N\) 个点卡掉的情况)

下周任务计划:

  1. 学习无向图Tarjan

  2. 学习莫队

  3. 任务计划几道题做掉

  4. 复习单调栈(……)


CSP-S2题目难度好像出来了?

我需要深刻反思,为什么号称老选手却连绿题都不能A。

11.13

模拟赛3

T1

充分反映出基本算法直觉的欠缺。

P6733 原题。

突然发现当年这道月赛题验题人是学长奆佬 \(\color{black}{\text{离}}\color{red}{\text{散小波变换}}^\text{。}\) 。。。

推了半天式子,正解是二分

“第k个”应该有很大暗示了,可惜没get到。

我本来想到的是贪心,判断a, b混合优于a, c混合,但其实应该考虑a, b混合结果大于x的条件,再枚举x

思考方向:二分,等效变换式子,判断 \(≥0\)

/*
二分答案 
check时算出浓度(热量)差,然后排序,然后经典双指针
*/
#include <bits/stdc++.h>
using namespace std;
template <class T>
T read(T& x) {
	x = 0; T sign = 1, ch = getchar();
	while(!isdigit(ch) && ch != '-') ch = getchar();
	if(ch == '-') { sign = -1; ch = getchar(); }
	while(isdigit(ch)) {
		x = x * 10 + ch - '0';
		ch = getchar();
	}
	x *= sign;
	return x;
}
const int N = 1e5 + 10;
int n, k;
double c[N], v[N], ans = 0.0, a[N], b[N];
bool check(double x) {
	// (c1 * v1 + c2 * v2) / (v1 + v2) >= x
	// c1 * v1 + c2 * v2 >= x * v1 + x * v2
	// (c1 - x) * v1 + (c2 - x) * v2 >= 0
	int cnt = 0;
	for(int i = 1; i <= n; i ++ ) {
		a[i] = (c[i] - x) * v[i];
		b[i] = (x - c[i]) * v[i];
		if(a[i] >= b[i]) cnt -- ; // 去!!重!! 
	}
	sort(a + 1, a + 1 + n);
	sort(b + 1, b + 1 + n);
	// p1从前往后,p2单调增
	// 如果a[p1]大于b[1..p2],那么a[p1 + 1]显然至少也大于b[1..p2]
	int p = 1;
	for(int i = 1; i <= n; i ++ ) {
		while(p <= n && a[i] >= b[p]) p ++ ;
		cnt += p - 1;
	}
	return (cnt >> 1) >= k;
}
int main() {
	read(n); read(k);
	for(int i = 1; i <= n; i ++ ) { read(v[i]); read(c[i]); }
	double L = 0.0, R = 2e12;
	for(int i = 1; i <= 60; i ++ ) {
		double mid = (L + R) / 2;
		#ifdef debug
		cout << "check: " << mid << endl;
		#endif
		if(check(mid)) {
			ans = max(ans, mid);
			L = mid;
		} else R = mid;
	}
	printf("%.6lf\n", ans);
	return 0;
}

T2

经过一番硬刚,虽有波折,最后A了。

11.14

T1

线性DP,AC。

不过本来可以用一个变量记录max却用了线段树。。。

T2

P1450

愚蠢的我竟然想到枚举 \(k\)\(n - k\),然后exgcd求方案数

把多重背包转化为无限背包的方式值得借鉴。

以及,我太菜了,先写错范围,后来写错一个+/-……

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
template<class T>
T read(T& x) {
	x = 0; T sign = 1, ch = getchar();
	while(!isdigit(ch) && ch != '-') ch = getchar();
	if(ch == '-') { sign = 1; ch = getchar(); }
	while(isdigit(ch)) {
		x = (x << 1) + (x << 3) + ch - '0';
		ch = getchar();
	}
	x *= sign;
	return x;
}
const ll N = 1010, M = 2e5 + 10;
ll c1, c2, c3, c4, n, d1, d2, d3, d4, s, f[M];
ll ask(ll x) {
	if(x >= 0) return f[x];
	return 0;
}
int main() {
	#ifndef ONLINE_JUDGE
	freopen("coin.in", "r", stdin);
	freopen("coin.out", "w", stdout);
	#endif 
	read(c1); read(c2); read(c3); read(c4); read(n);
	f[0] = 1;
	for(int i = 0; i <= 1e5; i ++ )
		if(i >= c1) f[i] += f[i - c1];
	for(int i = 0; i <= 1e5; i ++ )
		if(i >= c2) f[i] += f[i - c2];
	for(int i = 0; i <= 1e5; i ++ )
		if(i >= c3) f[i] += f[i - c3];
	for(int i = 0; i <= 1e5; i ++ )
		if(i >= c4) f[i] += f[i - c4];
	// 先物体再体积!!否则f[a + b]和f[b + a]重复!!! 
	for(int i = 1; i <= n; i ++ ) {
		read(d1); read(d2); read(d3); read(d4); read(s);
		d1 ++ ; d2 ++ ; d3 ++ ; d4 ++ ;
		printf("%lld\n",
		    ask(s)
		  - ask(s - c1 * d1) - ask(s - c2 * d2) 
		  - ask(s - c3 * d3) - ask(s - c4 * d4)
		  + ask(s - c1 * d1 - c2 * d2) + ask(s - c1 * d1 - c3 * d3)
		  + ask(s - c1 * d1 - c4 * d4) + ask(s - c2 * d2 - c3 * d3)
		  + ask(s - c2 * d2 - c4 * d4) + ask(s - c3 * d3 - c4 * d4)
		  - ask(s - c1 * d1 - c2 * d2 - c3 * d3)
		  - ask(s - c1 * d1 - c2 * d2 - c4 * d4)
		  - ask(s - c1 * d1 - c3 * d3 - c4 * d4)
		  - ask(s - c2 * d2 - c3 * d3 - c4 * d4)
		  + ask(s - c1 * d1 - c2 * d2 - c3 * d3 - c4 * d4)
		);
	}
	return 0;
}

11.17

期中考试结束,闲着没事干把带修莫队、树上莫队、Treap(没时间学了 写了一下。

然后树上莫队被SPOJ卡常,T了一个点,\(\color{#ad8b00}\texttt{无奈之下【】}\)

11.18

期中考试成绩出来,学过化竞的我竟然只有\(\color{#e74c3c}{\tt 70}\),数学第二次低于130,取得\(\color{#e74c3c}{\tt 129}\) 的好成绩。

但是:语文作文首次达到\(\color{#fadb14}{\tt 47}\),总分\(\color{#fadb14}{\tt 112}\);英语距最高分仅差2分,达到\(\color{#52c41a}{\tt 136}\);生物也达\(\color{#52c41a}{\tt 93}\),打破了低于90的怪圈。

所以:塞翁失马,焉知非福,事在人为,怀着乐观的心态努力吧!

11.19

\(\Huge\tt NOIP\ RP++\)

\(\LARGE\tt NOIP\ RP++\)

\(\Large\tt NOIP\ RP++\)

\(\large\tt NOIP\ RP++\)

$ \tt NOIP\ RP++$

\(\Huge\tt NOIP\ RP++\)

\(\LARGE\tt NOIP\ RP++\)

\(\Large\tt NOIP\ RP++\)

\(\large\tt NOIP\ RP++\)

$ \tt NOIP\ RP++$

\(\Huge\tt NOIP\ RP++\)

\(\LARGE\tt NOIP\ RP++\)

\(\Large\tt NOIP\ RP++\)

\(\large\tt NOIP\ RP++\)

$ \tt NOIP\ RP++$

\(\Huge\tt NOIP\ RP++\)

\(\LARGE\tt NOIP\ RP++\)

\(\Large\tt NOIP\ RP++\)

\(\large\tt NOIP\ RP++\)

$ \tt NOIP\ RP++$

出发前去教室拿水杯,被我们敬爱的化学老师怼了两句:

WH考化学,心想这么简单,于是按部就班,到了倒数第二题计算,做做做做,发现时间来不及,最后刷刷刷把最后一题写完,然后就取得了这个好成绩。

我:好,要是NOIP这样就能200+了,谢谢老师考前鼓励


坐车过程中有点头晕,但后来就“渐至佳境”了。

下午4:30左右到达宾馆,某同学身份证没带(默哀),好在后来电子身份证办到了,祝他考试顺利(

晚饭15个人一桌,边吃边聊,将近一个小时,主题大多是围绕刚刚过去的期中考试。。。

回去打了拓扑排序等算法的板子,拓扑排序第一次还写挂了,之后颓yorg.io一个多小时,简单模式第88天被干掉了,因为攻击力不够。睡觉。大概到12点多才睡着。

\(\color{#e74c3c}{\tt\text{10.23}}\)

好耶,果然是T3写一半转T4

如果CCF脚造数据的话,说不定我T3还能骗到20分(

Md T4部分分都不晓得细节挂没挂

具体战况:

8:25 ~ 8:27

JSOI Linux就是屑,题目传得太慢!!

8:28 ~ 8:35

浏览题面

咦,怎么3道数学?

8:36 ~ 9:30

T1类埃氏筛,卡常,卡了半天发现自己SB没开O2

期望得分:70 ~ 100

9:30 ~ 10:45

T3瞎写了一个算法,如果CCF脚造数据的话大概可以骗10pts。。。我也没指望写这题QAQ

10:46 ~ 11:10

T2想了半天,开始读错题了,后来想了半天发现部分分好像是背包

然后又SB求了方案数

然后又SB写了dp[i - 1][j - k] * v[k],后来发现是dp[i - 1][j - (1 << k)] * v[k]

然后又犯了一堆睿智细节错误

最后终于调出来了,期望30 ~ 50pts

11:11 ~ 11:35

纸上谈兵,口胡T4几个部分分,自以为能写

11:36 ~ 11:55

大模拟爬爬爬爬爬!!!

11:56 ~ 11:58

冒险改大了T1数组大小,希望不MLE。。。

11:59 ~ 12:00

\[\tt{NOIP\ RP++} \]

\[\tt{NOIP\ RP++} \]

\[\tt{NOIP\ RP++} \]


当然也有很多遗憾:

  1. T3没写暴搜,也没随机化
  2. T4该拿的部分分(几个)都没工夫写!

wtf T4 0pts?!!

11.27

经过估分,大概有1=,毕竟JS还没有那么卷。。。

忽然发现竞赛基地的指纹更新了,需要重新找教练登记。

几位和我一样的老年选手已经登记过了。

我忽然意识到,我已不再是OIer了。

https://www.luogu.com.cn/blog/JuRuo-CChOer-OIer/Goodbye-OI

11.29

162pts爬了。

@小图灵 ???说好的184???

T4 200行代码 == 0pts

12.3

骗了个1=(

posted on 2022-02-17 18:04  StuEmpire  阅读(110)  评论(0编辑  收藏  举报