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卷)
10.7
返校没几天,重游基地(信竞专用机房)
10.7
Virtual Participate 牛客模拟赛2
第一道题看似是一个DP,但是其对2取余数的性质导致可以借助奇偶性简化问题,也就是说知道了一个区间内1的个数就可以推出答案是0还是1。
第二道题涉及到数学排列组合,仔细分析,并不复杂(有空隙的填充,把空隙减掉就行了)。不要有畏难情绪。
两次模拟赛总结:
第一题必须冷静审题+分析。
第二题有思维含量,尽可能分析问题,不要仅限于暴力分。
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 总结
- 对自己过于自信,固守原来的开题模式。
- 思维不够灵活。
- 心态处理不当,不能发挥最佳水平。
此后,真的是背水一战了。
10.27
大悲,30min写出了T1的AC代码,用的是set
不清楚考场上为什么这么SB
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没写完。
经验:
- 部分分的合理分析,思维角度的转换。
比如说T2的80pts部分分:
部分分2 对于每个f[x]建一个vector 然后询问变成询问300次,某个区间里有没有某一个值 在vector里面二分查找 查询300*m*logn
值域具有很强的提示性,启发做题者转换思维角度,从纵坐标集合当中二分找区间。
- 战略。
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
- 审题的重要性。
本人重构了 \(\Huge2\) 次某题的代码(
11.7
常镇扬三市模拟赛2
-
T2“发明”了一种神奇的单调栈做法(因为正规方法忘了),结果还是挂了分
-
T3暴力没打满,虽然骗了10分
经验
- 对拍数据不能完全随机,要加一点限制条件。
比如T2自己对拍生成的数据有解概率较小,而自己乱搞的单调栈出错情况又很阴险。(我辛辛苦苦写了 \(\Huge1.5h\) ,结果只比暴力多20pts?!!)
upd 11.8 是学校老爷机的问题。。。link
- 适时转变思维角度。
T2标算单调队列。。。
以及:把SCC换成链的操作(对于DAG正解)。
- 一!定!要!分!类!讨!论!
在空间、复杂度及常数保证的情况下,暴力程序必须作为一个Sub
在程序中体现(鬼知道你对拍能不能查出来高级算法有没有写挂)!
- 思维方式
证明“最优性”与“可行性”
(upd 11.8)
- 常数,快读!(难以保证不会出现把我 \(N\) 个点卡掉的情况)
下周任务计划:
-
学习无向图Tarjan
-
学习莫队
-
任务计划几道题做掉
-
复习单调栈(……)
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
当然也有很多遗憾:
- T3没写暴搜,也没随机化
- 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=(