Ethan1201
2024-11-02 22:42:44
蒟蒻作者声明:本游记暂只包括J组复赛经历。
第一更:2024.11.2 19:35
本蒟蒻的信竞生涯为可怜的一年多一点,就被搞去参加了CSP。特别的凄惨。其中我的信竞生涯初期还是自学的,后面一直恶补,在跟着教练的同时自己偷偷卷......
坐标:GD-SZ
升级打怪ing(本蒟蒻刚开始信竞)。。。
崭新的2024赛季开始了。这也是我信竞生涯开始的一周年。
4.4~4.6:在紫堡OI团队里面进行了为期3天的清明集训,并举办了内部IOI赛制的5场比赛,见识了集团里面的各位神犇(如 @luoguhandongheng 等),被虐爆了(虽然没有爆0,还AK了一场,但还是纯纯一枚蒟蒻)。
4.Mid~7.14 学科,其中掺杂着参加了ZB杯,进了复赛以后又被虐爆了。。。然后备考期末,冲集团前十。
7.15~8.31 暑假集训,去中心校区,每天一个上午加一个下午,讲课老师进度又快得要命,我这种蒟蒻根本跟不上,度日如年,生不如死(绿题让我们自学)。
9.21 CSP2024 初赛,仍然在中心校区,J组和S组初赛稳稳过掉(我J组初赛考得竟然比我们学校一大佬还高,96.5,虽然没啥用,但还是庆祝一下),在10点左右捞了2分回来,美滋滋;又在还剩10分钟交卷时捞了1.5分,美滋滋2.0;S组压线过,61。
10.1-10.7 国庆集训,但只参加了一半,因为还有别的比赛。
10.8-10.24 每天在SGY的中午不午睡了,跑去机房刷题(上分),但晚上已经没时间刷题,备战期中考。
10.25 心里奇慌,刚学一年就考CSP。
早上5:00起床,带着惺忪睡眼坐地铁到了高中园,到了之后拍了照,又坐在校门口的凳子上缓一会儿。
6:30 到达考场。
7:00-7:20 准备考前注意事项,复习Windows 和 NOI Linux 2.0虚拟系统的使用方法。
7:30 进入考点,找到了我的同学&大佬 @xiaowr XWR,然后坐在大堂内,我俩都在创新高中考。
8:00 前往考场,进入考场(之前提到的那位大神路过)。 CCF实在令人可恶,不允许带纸巾进去,对鼻炎患者极度不友好(我那个考场也有一位是这样)。
8:00-8:30 签完《CSP-J/S诚信考试及知情同意书》,才知道可以用Windows......(之前一直在练Linux)于是直接关掉虚拟机,然后在等发解压码之前开了4个程序,在Dev-C++上面打了个模版。
8:30 CSP-J2开始,解压码发了出来,开始看题。
看到那么多的扑克牌图片,人都傻了,当时心里想CCF真狠,T1 就搞大的,以为很难,结果一细看,纯纯map练习题,直接判断一下是否标记过,没标记过的就标记,并从52张牌中减少一张需要拿的牌,标记过的不管。
#include <bits/stdc++.h>
using namespace std;
map<string, int> mp;
signed main(){
//freopen("poker.in", "r", stdin);
//freopen("poker.out", "w", stdout);
int n;
long long sum = 0;
cin >> n;
for (int i = 1; i <= n; i++){
string str;
cin >> str;
if (mp[str] == 0) sum++;
mp[str] = 1;}
cout << 52 - sum;
//fclose(stdin);
//fclose(stdout);
return 0;
}
15分钟成功秒掉
8:55 看了半天的题面,一开始以为是一道模拟题,但后面发现一道纯简单DFS搜索题,但有点不放心,模拟也测了一遍,然后还是用的DFS, 用vis数组标记了一下,写出了如下代码:(小插曲,就是 printf 压根没往文件里输出,估计是没清空缓存,手动清了一下,过了)
#include <bits/stdc++.h>
#define endl '\n'
#define int long long
using namespace std;
const int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
char a[1010][1010];
bool vis[1010][1010];
signed main(){
//freopen("explore.in", "r", stdin);
//freopen("explore.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int T;
cin >> T;
while (T--){
memset(vis, 0, sizeof(vis));
int n, m, k;
cin >> n >> m >> k;
int x, y, d;
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;
while (k--){
int xx = x + dx[d], yy = y + dy[d];
if (xx >= 1 && xx <= n && yy >= 1 && yy <= m && a[xx][yy] == '.'){
x = xx;
y = yy;
vis[xx][yy] = 1;}
else
d = (d + 1) % 4;}
int ans = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
if (vis[i][j])
ans++;
cout << ans << endl;}
//fclose(stdin);
//fclose(stdout);
return 0;
}
赛后总结的时候发现,T2 这道题直接按题意模拟就行了,没必要用搜索,于是又在家里修改出了代码:
#include <bits/stdc++.h>
#define int long long
using namespace std;
bool vis[1005][1005];
char ch[1005][1005];
const int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
void solve(){
//freopen("explore.in", "r", stdin);
//freopen("explore.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
int n, m, k, x0, y0, d0;
memset(vis, 0, sizeof(vis));
cin >> n >> m >> k;
cin >> x0 >> y0 >> d0;
for (int i = 1; i <= n; i++) {
char s[1005];
cin >> s;
for (int j = 1; j <= m; j++)
ch[i][j] = s[j - 1];}
vis[x0][y0] = true;
for (int i = 1; i <= k; i++) {
int x1 = x0 + dx[d0], y1 = y0 + dy[d0];
if (1 <= x1 && x1 <= n && 1 <= y1 && y1 <= m && ch[x1][y1] == '.') {
x0 = x1;
y0 = y1;}
else
d0 = (d0 + 1) % 4;
vis[x0][y0] = true;}
int ans = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
ans += vis[i][j];
cout << ans << endl;
}
signed main() {
int T;
cin >> T;
while (T--)
solve();
//fclose(stdin);
//fclose(stdout);
return 0;
}
然后测了测大样例,发现最后一个跑不过,我寻思着是不是TLE了,于是,我考场上就想了一个奇怪的假优化方法,调了有点久,才把样例重新过掉,然后发现,大样例还是跑不过。我看时间耗得略微有点久,我就跳题看下一题了,等最后写完所有题再回来看。最后回来看了这一题,代码最后改成了上面的样子。 还好最后应该改对了。
9:40 T3 先打了个爆搜,骗个 10
9:50 想了一下,其他的应该也是XX8888888...之类的,就有了
10:34 调出代码,不知道大概多少分,可能70
#include <bits/stdc++.h>
#define int long long
using namespace std;
int nd[1005] = {6, 2, 5, 5, 4, 5, 6, 3, 7, 6};
int minn[105];
void work(){
int n; cin>>n;
if (n==1){
cout << "-1\n";
return;}
string ans;
while (n > 21){
n -= 7;
ans.push_back('8');}
cout << minn[n] << ans << '\n';
}
signed main(){
//freopen("sticks.in", "r", stdin);
//freopen("sticks.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
for (int i = 1; i <= 999; i++){
nd[i] = nd[i % 10];
if (i > 9) nd[i] += nd[i / 10];
if (!minn[nd[i]]) minn[nd[i]] = i;}
int T; cin >> T;
while (T--) work();
//fclose(stdin);
//fclose(stdout);
return 0;
}
调完之后有点慌。
看了一眼题目,觉得dp(动态规划思路)可以做,建图也应该可以,但是还是有点不会做(蒟蒻本性)。可以直接总司令。
因此打算骗分。看到第 2, 3 个数据点范围很小考虑爆搜骗点分,写了半天愣是过不了样例,调了半天。考场感觉是蓝题,但一开始竟然是绿题(后面改蓝了)。有点小意外。
11:10 代码调出来了,预估5-10
11:20 实在太无聊,想写 C++ 小游戏又没时间 (赛后才知道可以在 Microsoft 玩 Surf,以为考试不能玩)。
11:30-11:50 检查代码,尝试优化。
11:50 检查防止爆0,cheaker.exe 表示你没毛病。
最后一点点时间,回去看T3,还是找不到为啥爆掉(总之我感觉T3爆了),时间复杂度是