CSP2024-S GD 迷惑行为大赏
- CSP2024-S GD 迷惑行为大赏:编译错误(版本一) - caijianhong - 博客园
- CSP2024-S GD 迷惑行为大赏:编译错误(版本二) - caijianhong - 博客园
- CSP2024-S GD 迷惑行为大赏:英文注释 - caijianhong - 博客园
- CSP2024-S GD 迷惑行为大赏:中文字符 - caijianhong - 博客园
今年我们放弃使用 python,转而使用高贵的 grep
配合其它 GNU 工具进行统计分析。
统计
本场比赛共 12406 份 .cpp 文件,准考证号最大值 GD-S03532,另外还有 JS-S01094、JS-S01348 两位神秘选手。
关键词和库函数
freopen
共 23520 次。//freopen
共 182 次。include
共 16342 次。bits/stdc++
共 10281 次。namespace
共 12348 次。std
共 53311 次。true
共 2408 次,false
共 2834 次。for
共 47184 次。while
共 12113 次。void
共 5936 次。return
共 23569 次。#define int long long
共 956 次。
文件大小
本场比赛有 115 份有效空文件。最长代码前五名如下:
41648 answers/GD-S01832/detect/detect.cpp
21290 answers/GD-S01579/color/color.cpp
15854 answers/GD-S03126/color/color.cpp
9120 answers/GD-S01186/arena/arena.cpp
8367 answers/GD-S00179/arena/arena.cpp
恭喜 answers/GD-S01832/detect/detect.cpp 以 41K 代码荣获最长代码称号!
编译错误统计
本场比赛选手提交的代码成功产生共计 18946 行、100017 词、1368719 字节的编译错误,其中 712 个文件编译失败,11695 个文件编译通过。
第一份编译错误的代码出现在 answers/GD-S00002/duel/duel.cpp。
最后一份编译错误的代码出现在 answers/GD-S03532/color/color.cpp。
编译错误信息长度:行数的前 3 名:
complie answers/GD-S00981/detect/detect.cpp: 1458 lines, 8114 words, 122830 bytes
complie answers/GD-S01477/duel/duel.cpp: 803 lines, 3659 words, 61169 bytes
complie answers/GD-S01041/detect/detect.cpp: 738 lines, 4053 words, 61887 bytes
字节数的前 3 名:
complie answers/GD-S00981/detect/detect.cpp: 1458 lines, 8114 words, 122830 bytes
complie answers/GD-S01041/detect/detect.cpp: 738 lines, 4053 words, 61887 bytes
complie answers/GD-S01477/duel/duel.cpp: 803 lines, 3659 words, 61169 bytes
answers/GD-S00981/detect/detect.cpp 这份代码毫无疑问荣获最长编译错误称号,取得了 1458 行,122KB 的好成绩!翻看其代码发现他试图 cin 和 cout std::queue
。
编译错误
freopen
错的太多了,无法一一列举,以下是几个错例:
scanf("color.out","w",out);
printf("color.in","r",in);
freopen("road.in","r",strin);
freopen("duel.in","r",std);
freopen ("duel.in","r","stdin");
feopen("arena.in","r",stdin);
#freopen("duel.in","r",stdin);
freopen(stdout,'t',"detect1.ans");
freopen(stdin,'w',"detect1.in");
freopen(duel.in,"r",stdin);
freopen("","r",)
preopen("arena.in","r",stdin);
freopen("color.in","r".stdin);
freopen("duel.in","r");
freeopen.in(detect.in);
freopen ("detect.in",r,stdin);
正确写法:
freopen("duel.in", "r", stdin);
freopen("duel.out", "w", stdout);
没有主函数
complie: answers/GD-S00045/arena/arena.cpp
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/9/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
collect2: error: ld returned 1 exit status
answers/GD-S00045/arena/arena.cpp 通过提交空文件,荣获本场比赛第一份(文件名字典序最小)无 main 函数代码称号,在 \(147\) 份无 main 代码中脱颖而出!
技术违例
./answers/GD-S00177/color/color.cpp:#pragma GCC optimize(2)
./answers/GD-S00177/detect/detect.cpp:#pragma GCC optimize(2)
./answers/GD-S00177/duel/duel.cpp:#pragma GCC optimize(2)
./answers/GD-S01758/detect/detect.cpp://#pragma GCC octime(2)
GD-S00177 通过在代码中手动开启 O2 优化,喜提三题爆零的成绩!
内存超限
complie: answers/GD-S00213/arena/arena.cpp
/tmp/ccCBQ6dz.o: in function `main':
arena.cpp:(.text.startup+0x9): relocation truncated to fit: R_X86_64_PC32 against symbol `m' defined in .bss section in /tmp/ccCBQ6dz.o
编译错误,内存超出限制!!!answers/GD-S00213/arena/arena.cpp 荣获本场比赛第一份内存超限代码称号,在 \(23\) 份内存超限代码中勇夺冠军!
环境悲报
answers/GD-S00016/color/color.cpp:7:25: error: ‘long long int index [200005]’ redeclared as different kind of entity
answers/GD-S00371/duel/duel.cpp:4:34: error: ‘int kill’ redeclared as different kind of entity
answers/GD-S00549/duel/duel.cpp:4:44: error: ‘int kill [100005]’ redeclared as different kind of entity
answers/GD-S01112/duel/duel.cpp:8:12: error: ‘bool kill [100005]’ redeclared as different kind of entity
answers/GD-S01779/detect/detect.cpp:8:5: error: ‘int index’ redeclared as different kind of entity
answers/GD-S02155/duel/duel.cpp:8:5: error: ‘long long int kill’ redeclared as different kind of entity
answers/GD-S02869/detect/detect.cpp:14:17: error: ‘bool kill [100010]’ redeclared as different kind of entity
answers/GD-S02945/duel/duel.cpp:6:15: error: ‘long long int kill [11451]’ redeclared as different kind of entity
answers/GD-S03145/duel/duel.cpp:4:32: error: ‘bool kill [100005]’ redeclared as different kind of entity
answers/GD-S03306/detect/detect.cpp:12:21: error: ‘bool bzero’ redeclared as different kind of entity
answers/GD-S03421/detect/detect.cpp:12:36: error: ‘int yn [1000005]’ redeclared as different kind of entity
answers/GD-S00193/detect/detect.cpp:151:5: error: reference to ‘rend’ is ambiguous
answers/GD-S01640/color/color.cpp:11:9: error: reference to ‘next’ is ambiguous
answers/GD-S01898/arena/arena.cpp:112:3: error: reference to ‘function’ is ambiguous
answers/GD-S02035/detect/detect.cpp:31:33: error: reference to ‘get’ is ambiguous
answers/GD-S02073/duel/duel.cpp:31:3: error: reference to ‘hash’ is ambiguous
answers/GD-S02314/arena/arena.cpp:37:12: error: reference to ‘rank’ is ambiguous
answers/GD-S02784/detect/detect.cpp:43:14: error: reference to ‘next’ is ambiguous
以上选手因为使用各种标准库函数名称导致代码编译错误,产生了 \(16\) 份悲报!
max(long, long long) 惨案
answers/GD-S00229/detect/detect.cpp:75:60: error: no matching function for call to ‘max(long long int&, long int)’
75 | endd[p]=max(endd[p],lower_bound(test+1,test+1+m,d)-test);
| ^
真该死啊!两个指针相减返回了 long int
,这个在本机真的能过编,该死啊!!!本场比赛共 \(11\) 份代码被此错误命中。
无返回类型
answers/GD-S00230/detect/detect.cpp:9:12: error: ISO C++ forbids declaration of ‘st1’ with no type [-fpermissive]
9 | inline st1(){
| ^
此写法在某些旧版本编译器上可以通过编译,在正式编译环境中报错。此问题的一般解决方法为开启编译开关 -fno-ms-extensions
。本场比赛共 \(13\) 份代码被此错误命中。
头文件查找失败
answers/GD-S00070/arena/arena.cpp:1:9: fatal error: iostram: No such file or directory
answers/GD-S00203/duel/duel.cpp:2:9: fatal error: conio.h: No such file or directory
answers/GD-S00371/arena/arena.cpp:1:9: fatal error: bits/stdc++.h0: No such file or directory
answers/GD-S00840/arena/arena.cpp:1:9: fatal error: bit/stdc++.h: No such file or directory
answers/GD-S01193/arena/arena.cpp:1:10: fatal error: Bits/stdc++.h: No such file or directorydirectory
answers/GD-S01459/arena/arena.cpp:1:9: fatal error: bitrs/stdc++.h: No such file or directory
answers/GD-S01515/arena/arena.cpp:1:9: fatal error: bist/stdc++.h: No such file or directory
answers/GD-S01701/detect/detect.cpp:1:10: fatal error: bits/https.h++: No such file or directory
answers/GD-S01825/arena/arena.cpp:3:9: fatal error: bits\stdc++.h: No such file or directory
answers/GD-S02001/arena/arena.cpp:2:9: fatal error: windows.h: No such file or directory
answers/GD-S02018/arena/arena.cpp:1:9: fatal error: dit/stdc++.h: No such file or directory
answers/GD-S02197/arena/arena.cpp:1:9: fatal error: bits/stdc++.h : No such file or directory
answers/GD-S02554/color/color.cpp:1:9: fatal error: ibts/stdc++.h: No such file or directory
answers/GD-S02656/color/color.cpp:1:10: fatal error: bits./stdc++.h: No such file or directory
answers/GD-S02950/detect/detect.cpp:2:9: fatal error: bfd.h: No such file or directory
answers/GD-S03363/duel/duel.cpp:1:10: fatal error: bits/stdc++.H: No such file or directory
本场比赛共 \(49\) 份代码(以上错误已去重)被此错误命中!这样的错误,一错就是三四题全错,整场比赛直接白打。
自动补全
本场比赛有非常多选手因头文件自动补全惨遭编译错误!由于此错误形式多样,无法具体统计,以下给出典型错例:
answers/GD-S00651/arena/arena.cpp:4:1: note: ‘memcpy’ is defined in header ‘<cstring>’; did you forget to ‘#include <cstring>’?
answers/GD-S00897/arena/arena.cpp:1:1: note: ‘std::cin’ is defined in header ‘<iostream>’; did you forget to ‘#include <iostream>’?
answers/GD-S01189/duel/duel.cpp:3:1: note: ‘INT_MAX’ is defined in header ‘<climits>’; did you forget to ‘#include <climits>’?
answers/GD-S02150/arena/arena.cpp:1:1: note: ‘stdin’ is defined in header ‘<cstdio>’; did you forget to ‘#include <cstdio>’?
answers/GD-S02150/arena/arena.cpp:6:26: note: ‘stdout’ is defined in header ‘<cstdio>’; did you forget to ‘#include <cstdio>’?
answers/GD-S02343/duel/duel.cpp:3:1: note: ‘std::vector’ is defined in header ‘<vector>’; did you forget to ‘#include <vector>’?
answers/GD-S03432/color/color.cpp:1:1: note: ‘getchar’ is defined in header ‘<cstdio>’; did you forget to ‘#include <cstdio>’?
answers/GD-S03432/color/color.cpp:1:1: note: ‘std::cout’ is defined in header ‘<iostream>’; did you forget to ‘#include <iostream>’?
answers/GD-S03432/color/color.cpp:1:1: note: ‘std::endl’ is defined in header ‘<ostream>’; did you forget to ‘#include <ostream>’?
answers/GD-S01539/detect/detect.cpp:42:9: error: ‘sqrt’ was not declared in this scope
answers/GD-S00731/detect/detect.cpp:33:25: error: ‘floor’ was not declared in this scope
answers/GD-S00731/detect/detect.cpp:32:20: error: ‘ceil’ was not declared in this scope
意外的分号删除
answers/GD-S00111/detect/detect.cpp:11:1: error: expected initializer before ‘double’
11 | double f(double v1,double v0,double a){ // 戮脿脌毛
| ^~~~~~
此报错信息一般是因为上一行没有分号,本场比赛共 \(11\) 份代码被此错误命中。
杂项
cc1plus: error: ‘::main’ must return ‘int’
翻了发现是 #define int long long 然后 int main(具体哪位选手忘了)
answers/GD-S01683/detect/detect.cpp:31:49: error: invalid type argument of unary ‘*’ (have ‘int’)
31 | D[i].x+=D[i].v*timeout+0.5*D[i].a*timeout**2;
| ^
\(timeout^2\)
answers/GD-S01384/detect/detect.cpp:78:14: error: stray ‘#’ in program
78 | return 0;#include <bits/stdc++.h>
| ^
很惨的一位选手,代码被复制了两次。
中文字符选
鸟为什么会飞?
answers/GD-S00383/color/color.cpp
/*
鸟为什么会飞?
因为它们向往飞向天空?
不然
那么...你的答案?
因为它们必须飞向天空
当终焉的陨星终究落下
唯有飞翔的鸟儿
才能获得自由的生命
*/
www好逆天
answers/GD-S00383/arena/arena.cpp
/*
www好逆天 t1很简单A了吧,t2t3t4什么鬼啊!!!!!!
感觉上午的内容有点颠
练字ing......
psypsypsy......
游戏怎么可能比老婆重要呢?
还是这个问题
“我有什么可以喜欢的”
回答依旧,只有一句
我喜欢你
只需要这句就够了
无论你多美,成绩多好,我们聊了多少,都不是最重要的
重要的是,我只喜欢你
"Life is too long to end at a grave."
——一生太长,墓志铭太短
这句话的背后,是奥托500年对爱的执着
你常说,活着
他对卡莲说的最后一句话,亦是
“活下去”
*/
哇这键盘怎么切换不了中英文啊
answers/GD-S00039/arena/arena.cpp
00:00 哇这键盘怎么切换不了中英文啊
笑点解析:这句话是中文。
佛祖保佑 上帝保佑
answers/GD-S01504/detect/detect.cpp
// 佛祖保佑 上帝保佑
// ong xi qi ma bi mi bei mei hong
题解
answers/GD-S00970/detect/detect.cpp:1:
// 首先将问题转化为每个车有一段超速区间 [l, r],若没有点与这个区间有交,则称这个区间是无用的
// 计算出所求第一问后删去所有无用区间,然后以右端点为关键字将区间排序,开始大力贪心!
// 首先在已经确定要选的点集内找一下,若没有点在这个区间内则需再选一个点。
// 选点时,选取可以选的点中最靠右的点。
// 正确性可以感受到,稳妥起见有时间再拍一下。
// 注意精度问题。
answers/GD-S00970/color/color.cpp:2:
// 显然有 n^3 ~ n^2 做法,写了用来对拍。
3:// 设 dp[i][j][k] 表示枚举到 i,上一个颜色为红色的为 j,上一个颜色为蓝色的为 k,目前的最大获益。
4:// 然后发现其实设两维颜色状态是不必要的。设 dp[i][j][0/1] 表示枚举到 i ,当前颜色为红色或蓝色,上一个另一种颜色的位置为 j,目前的最大获益。
5:// 显然转移 O(1),可以到 O(n^2)。
6:// 注意到会产生贡献的数对形如若干条链,而这些链的总长为 O(n),显然上述暴力枚举了许多无用数对,十分浪费。
7:// 不过貌似用线段树不太能直接维护这个?其实可以?把塞进线段树内的编号按颜色重排一下然后其实是区间查?
8:// 先润去看T4了,待会再继续想。
answers/GD-S00970/arena/arena.cpp:2:
// 题目读了好久才读懂……
/ 首先注意到这个信息拥有无与伦比的半群性质,人话,很容易合并。
/ 对于擂台形成的树,已经就是一棵线段树了。
/ 维护区间信息 {op, val} 表示里面是否有不确定的数,若有不确定的数,则直接将编号加和,若没有,则视此轮规则取一个。
/ 注意到不能简单将编号加和,因为可能存在一个数未来可能需要当擂主但是其小于那轮所需值,
/ 但是每个数到根所需的值都是确定的,直接把 tag 全推了即可。
/ TestCase 比较多的时候可能不能直接 update,暂时不知道怎么处理,有点麻烦的说……
/ 把 tag 全推了,具体来说,若一个已确定的值不可能到根,则直接置为 0
// 嗯?那这个好像是单点修改区间查,BIT 维护一下?
// 其实并不是,可能会出现区间合并的时候两个元素都符合要求但因为此轮规则所以被迫选出一个的情况,还是要用线段树大力维护。
// 刚刚去外面炫了一个士力架,瞬间清醒了。
// 维护的和查询的都是二的整数次幂。
// 所以查询时不会拆出两个深度不同的区间,按照 push_up 的方法维护即可。
// 然鹅实际上暴力都打不完了……
// 这下子完蛋了完蛋了我的暴力分呜哇哇QAQAQ
answers/GD-S01627/duel/duel.cpp:9:
// 因此,将攻击力排序,然后令第二小的数减去第一小的数即可
// 桶排序,将攻击力从小到大排序,从后往前减
// 那么问题来了,怎么去设这个贪心?(
// 将小数组减去大数组,剩下的全部相加即可。
answers/GD-S01627/color/color.cpp:5:// 染色
// 1 2 1 注意到,若a[i]前不存在i,必为 0。
// 那么,对于上面的情况直接continue,数组a[i]最后数量为 1 的就没必要考虑了。
// 注意到可以暴力解前面的
// 从贪心的角度看,应该要最接近的两个数字涂同一种颜色的分值能更大化
// 但是需要考虑涂色后对其他的影响
// 因此,满足条件的两个之间的颜色应该不一样
// 所以正解应该是区间dp,但是维护很麻烦,不,应该说不会写(
// 完了,不会写区间了。
// 先从区间的概念出发。
// 设 f[i1][j1][k] 为区间 i1 , j1 下颜色k的最大值 , dp[i] 为目前 1-i 能达到的最大值
// 对于另一组成立的最靠近 i1 和 j1 的 f[i2][j2][k] (i2 < i1 < j1 < j2)
// 那么,设另一个数组 g[i] , 寻找另一组使其成立的数组。
// 也就是 dp[i] = max(f[1][i][1] + f[1][i][2] , f[1][g[i]][1] + f[1][g[i]][2]);
// 下面寻找一下 f[i][j][1] 与 f[i][j][2] 的关系。
// 然后我们惊人的发现思路好像错了。
// 换个思路。
// 首先,我们从 “因此,满足条件的两个之间的颜色应该不一样 ”出发,寻找 f[i][j][1];
// 那么,另一种颜色就存在于 f[i+1][j-1][2],更准确一点,就只是寻找 i + 1 和 j - 1 两个点或者连通点。
// 不妨全部涂红,寻找中间的点,然后将中间的全变为蓝色,接着进行进一步讨论
// 3 5 1 5 2 1 2 4 全为红时,找到 5 和 3 ,并将中间的全部染成蓝色
// 那么现在应该想的下一步就应该是全部为红时的情况有什么
// 先将 3 4 去除
// 设个队列,如果队首与队尾相同,弹出队首。
// 结果发现队列写错了,写完输出 0 了,令人忍俊不禁。
// 不写了。
answers/GD-S01627/arena/arena.cpp:5:
// 显然,我不会写。
// 连分析都不会分析写什么代码(
顺带一提有很多人在 T2 代码里插一堆行间注释写题解,实在太多了不展示了
标签:arena,detect,CSP2024,answers,cpp,GD,考神,大赏 From: https://www.cnblogs.com/caijianhong/p/18528789