2024 CSP-j 游记
第一轮 初赛
9-20
距离 CSP-J 第一轮仅剩 1 天。
晚上听了 MX 的初赛课,听说很有可能靠背包,直接懵逼。
9-21
距离 CSP-J 第一轮仅剩 0 天。
完了完了今天就要考试了好慌。
早上 \(6:30\) 坐着车前往烟台考点,路上看了一下计算机相关的知识就开始摆了。
\(7:40\) 到达,刚好看见了 @qp ,探讨了一下位运算的异或就进考场了。和 @qp 、@Tobeconfirmed 、@HenryGe 在一个考场,不慌了。
发卷了。选择题第三题又是讨厌的排列组合,算了半天没算出来,选了个 \(D\) 了事。第四题紧接着就是什么雷格码,根本没学过(有可能我太弱了),蒙了个 \(C\) 就过了。
其他的话都很简单,考完直接跑路。
上洛谷找了民间答案,对了一下,\(92.5\),太水了吧???
9-22
姜Sir 发成绩了,我果然是 \(92.5\) ,惊掉下巴。
膜拜 @gbrain 考了 \(98.5\) 全市第一。
9-24
又下通知了,28和29不管选啥都算对,可惜我没有,还是 \(92.5\)。
不过 @gbrain 这下变成了 \(100\) 分,五体投地。
第二轮 复赛
10-25
距离 CSP-J 第二轮仅剩 1 天。
上了一上午的学,下午出发。
早晨被要求把信息学竞赛介绍给班主任和语文老师,吐了。不过也是在她们面前好好夸了一下大二中信竞队。
下午2点从烟台出发,5点半到达日照。吃饭时遇见了 @qp、@_yysq 和 @Tobeconfirmed,然后去试机。和 @Tobeconfirmed、@szh0929在一个考场,还行。
10-26
距离 CSP-J 第二轮仅剩 0 天。
\(6:50\) 起床,吃完饭 \(7:40\) 出发。坐在车上和 @qp 聊了一下时间的分配问题,姜Sir 在车上不断地强调重点,直接进考场。
\(8:17\) 在座位上坐好,把 c++14 和 O2 开好,等着公布试题密码。
把选手目录解压好后用了 \(10 \text{min}\) 读了一遍题,直接做T1。很简单,直接去重然后用 \(52\) 一减即可。\(30 \text{min}\) 搞定。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e2 + 5;
int n;
int p[N];
// 令:D方块为1,C草花为2,H红桃为3,S黑桃为4
int main(){
freopen("poker.in", "r", stdin);
freopen("poker.out", "w", stdout);
cin.tie(0)->sync_with_stdio(0);
cin >> n;
for (int i = 1; i <= n; i++){
char ch[2];
cin >> ch;
if (ch[0] == 'D') p[i] = 1;
else if (ch[0] == 'C') p[i] = 2;
else if (ch[0] == 'H') p[i] = 3;
else if (ch[0] == 'S') p[i] = 4;
if (ch[1] == 'A') p[i] = p[i] * 10 + 1;
else if (ch[1] == 'T') p[i] = p[i] * 100 + 10;
else if (ch[1] == 'J') p[i] = p[i] * 100 + 11;
else if (ch[1] == 'Q') p[i] = p[i] * 100 + 12;
else if (ch[1] == 'K') p[i] = p[i] * 100 + 13;
else p[i] = p[i] * 10 + (int)(ch[1] - '0');
}
sort(p + 1, p + n + 1);
// for (int i = 1; i <= n; i++)
// cout << p[i] << " ";
int cnt = 0;
for (int i = 1; i <= n; i++){
if (p[i] == p[i - 1]) continue;
cnt++;
}
cout << 52 - cnt;
return 0;
}
T2的话也非常简单,按题意模拟即可,\(1 \text{h}\) 搞定。
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int N = 1e3 + 5;
int t;
char a[N][N];
bool vis[N][N];
// 方向:0为东→,1为南↓,2为西←,3为北↑
int fx[4] = {0, 1, 0, -1};
int fy[4] = {1, 0, -1, 0};
int main(){
freopen("explore.in", "r", stdin);
freopen("explore.out", "w", stdout);
cin.tie(0)->sync_with_stdio(0);
cin >> t;
while (t--){
// memset(a, '', sizeof(a));
memset(vis, 0, sizeof(vis));
int n, m, k;
int x, y, d;
cin >> n >> m >> k;
cin >> x >> y >> d;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> a[i][j];
vis[x][y] = 1;
for (int i = 1; i <= k; i++){
int xx = x + fx[d], yy = y + fy[d];
if (xx >= 1 && xx <= n && yy >= 1 && yy <= m && a[xx][yy] == '.')
x = xx, y = yy, vis[x][y] = 1/*, cout << x << " " << y << '\n'*/;
else
d = (d + 1) % 4;
}
int cnt = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (vis[i][j])
cnt++;
cout << cnt << '\n';
}
return 0;
}
这时候是 \(10:00\),上个厕所清醒一下,开T3。
T3我注意到了特殊性质,但并没有放在心上,只是仅仅打了几行表就开始打暴力。于是写了将近 \(150\) 行,以为能拿 \(20\),然而后来事实证明,这种做法是错误的。而假如我能利用特殊性质找到规律,这道题我可能拿到 \(30\) 甚至 \(60\) 甚至 \(100\)。这也是这次考试我的最大失误。
出考场后,听说 @qp、@zlqwq 等各位大佬都做出了T3,而且一等分数线据说是 \(230\)。心情不太好。
11-7
其实成绩前天就出来了,只不过因为那两天期中考试,来不及写。
成绩是 \(100 + 100 + 0 + 0 = 200\)。各位大佬都是 \(230\) 或 \(260\),一等奖肯定无缘了。不过对于我人生中的第一次 OI 比赛,确实积累了很多经验。
首先,最后两个小时的时间安排不合理。花了太多的时间打暴力,而且还是错误的,没有意识到应该先拿特殊性质的分。
其次,考试策略不足。当时赛场上并没有注意到特殊性质,如果能把特殊性质A的部分分拿到进而找到整个题的正解,一等奖肯定稳了。
纵观我加入YTEZ信竞队以来,其实并没有真正掌握一些算法,也从没有学会怎么应用。这是我没能拿到一等奖的最根本的原因。
然而这次的二等奖不代表我的信竞生涯的结束,自己选择的路跪着也要走下去,我照样可以通过我的努力进入S组并成为大佬。