CSP-J 2022 CQ 迷惑行为大赏
前言
今年有点忙,主要是我考场上写了一个正解三个玄学代码,所以忙着卡我的代码和到处测试去了。看了一下 S 组的位置都被占完了,据说 J 组都是烂活,我不信我要来看看。
正文
CQ 市的入门组 OIer 写了 \(1922\) 份代码,其中 \(350\) 份包含 \(352\) 个万能头。\(1816\) 个文件中有 \(2964\) 个 return 0;。其中 CQ-J00012 选手在 expr.cpp 中愤怒地写了 \(7\) 个,点开一看是打了样例。更为厉害的,CQ-J00051 选手写了 \(11\) 个。他分类讨论了长度比较小的表达式。CQ-J00461 是码神,他写了 \(20\) 个 return 0 进行长度 \(3\) 以下的表达式的分类讨论。
似乎整个 J 组最好玩的题就是 expr 呢(笑)。
暴戾语言
有两份代码提到了 f**k,不约而同地出现在最恶心的题逻辑表达式中。为了这两名选手的安全,不放考号。
鉴于 CCF 对暴戾语言行为禁赛一年的措施,我检索了常见词语没有找到除了这两份代码以及下面会出现的一位 NM 外的暴戾语言。
算法
CQ-J00144 在他的 expr 写了一棵线段树。还有 \(5\) 位选手在这道题造了表达式树(检索到了 build)。
没有通过平衡树名字和 tree 找到平衡树。
有两位选手在最后一题写了 queue,分别是 CQ-J00012(他自称使用的是 BFS)和 CQ-J00256(toposort 实现正解)。同时我们在 \(90\) 个文件中找到了 \(743\) 个对 dp 数组的使用。
有许多人在 T1 犯傻写了快速幂,通过检索常用快速幂名称,我找到了 \(34\) 份快速幂。然而他们并不知道可以直接特判加暴力(比如我)。
由于今年 T3 实在太过恶心,检索 1&1 出现了 \(20022\) 个结果(全是大样例)。其中 CQ-J00357 选手凭借 \(22\) 个 1&1 的巨长大样例,而 VSC 想要展现,成功卡住了我的电脑。
代码
检索 #define 之后在 \(412\) 文件中找到了 \(676\) 个结果。其中 CQ-J00256 在他的每一道题都使用了 \(12\) 行预编译指令。
#define ET return 0
#define fr1(i,a,b) for(int (i)=(a);(i)<=(b);(i)++)
#define fr2(i,a,b) for(int (i)=(a);(i)>=(b);(i)--)
#define fv(i,p) for(int (i)=0;(i)<(p).size();(i)++)
#define ll long long
#define ull unsigned ll
#define fi first
#define se second
#define pii pair<int,int>
#define pll pair<ll,ll>
#define pb push_back
#define mp make_pair
考虑到有非常多全局 long long 的方法,我统计了常见的几种。最后在 \(123\) 个文件中找到了全局定义 int 换 long long 的代码。
CQ-J00134,CQ-J00167,CQ-J00248,CQ-J00312,CQ-J00401,CQ-J00491,CQ-J00503 愉快地在代码中使用了 y1,让我们为他们默哀。特别地,CQ-J00503 非常惨:
#include<bits/stdc++.h>
using namespace std;
int n;
int m;
struct st{
	int x,y;
};
st a[1000];
int x,y,s1,s2,s3,s4,d1,d2,d3,d4;
st x1,y1,x2,y2,x3,y3,x4,y4;//不幸还是去世了
bool cmp(st a,st b)
{
	return a.x<b.x;
}
int main()
{
	freopen("point.in","r",stdin);
	freopen("point.out","w",stdout);
	cin>>n>>m;
	for(int i=0;i<n;i++)
	{
		scanf("%d%d",&a[i].x,&a[i].y);
//		此处省略49行正解注释
	}
	if(n==8)//妄图骗分
	{
		cout<<8;
	} 
	else if(n==4)
	{
		cout<<103;
	}
	else if(n==100&&m==0)
	{
		cout<<10;
	}
	else 
	{
		cout<<20;
	}
	return 0;
} 
而 CQ-J00101 非常敏锐地发现了这件事,他在 T3 使用了全篇的 yy1,不幸的是,他不会 T3。
这次当然还有 index 倒霉人。CQ-J00115 的 T4 似乎不幸逝世了。此人另一个死亡点是:
freopen("point1.in","r",stdin);//默哀x1
freopen("point.out","w",stdout);
int n,k;
cin >> n >> k;
for(int i=1;i<=n;i++){
	cin >> pp[i].x >> pp[i].y;
}int op=1;
sort(pp+1,pp+n+1,cmp2);
for(int i=1;i<=n;i++){
	ans=0;
	index[op].stk=i,dfs(i),index[op].hil=i+ans-1,index[op++].in=ans;//默哀x2
//	for(int i=1;i<=n;i++){
//		cout << vis[i] << " ";
//	}cout << endl;
}
有 \(7\) 份代码忘记改掉测完大样例的文件了,默哀。
通过检索 4.in,我发现 CQ-J00149 选手钟爱 114.in,他一共有三道题使用 114.in 输入,其中还有一道注释掉了妄图使用标准输入。默哀。
他的 T3 有字符画,是 AKIOI。
当然有许多恶臭人。\(12\) 份代码存在 114514。其中 CQ-J00471 选手在后三题只输出一个 114514。CQ-J00486 选手则是为了得到恶臭装了极小值的栈使用了 sta.push(-114514),相反的,CQ-J00042 的最大值:const double INF = 2e9 + 0.114514;。
CQ-J00362 的 T3 全文:
#include<bits/stdc++.h>
#define NM ""
#define flp(i, n) for(int i=1; i<=n; ++i)
using namespace std;
int main() {
	freopen(NM".in", "r", stdin);
	freopen(NM".out", "w", stdout);
	for(long long i=1; i<=1145141919810; ++i)
		cout<<114514<<endl;
	return 0;
}
CQ-J00007 选手定义了 debug,输出一个巨长无比的横线:
#define debug puts("----------------------------------")
CQ-J00232 的 T1 剑走偏锋使用 __int64:
void write(__int64 x) {
	if(x<0) putchar('-'),x=-x;
	if(x>9) write(x/10);
	putchar(x%10+'0');
	return;
}
long long a,b;
__int64 ans=1;
CQ-J00408 选手钟爱烈酒无法自拔(后面我们还会说他,记住他):
goto hooch;
...
int hooch = calc(1);
printf("%lld\n%lld %lld\n",hooch,cntand,cntor);
注释
有 \(59\) 份代码 AK 了某种比赛。比较普通就不看了。特别的,CQ-J00442 的呐喊激情澎拜以及最后的欧·亨利式结尾令人深思:
#include<bits/stdc++.h>
#define int unsigned long long
using namespace std;
int a,b;//I AK CSP-J!
int ans=1;//I AK CSP-J!
signed main(){
	freopen("pow.in","r",stdin);
	freopen("pow.out","w",stdout);
	cin>>a>>b;//I AK CSP-J!
	if(a==1){//I AK CSP-J!
		cout<<1;//I AK CSP-J!
		return 0;//I AK CSP-J!
	}//I AK CSP-J!
	if(b>=40){//I AK CSP-J!
		cout<<"-1";//I AK CSP-J!
		return 0;//I AK CSP-J!
	}//I AK CSP-J!
	for(int i=1;i<=b;i++){//I AK CSP-J!
		ans*=a;//I AK CSP-J!
		if(ans>1000000000){//I AK CSP-J!
			cout<<"-1";//I AK CSP-J!
			return 0;//I AK CSP-J!
		}//I AK CSP-J!
	}//I AK CSP-J!
	if(ans>1000000000){//I AK CSP-J!
		cout<<"-1";//I AK CSP-J!
		return 0;//I AK CSP-J!
	}//I AK CSP-J!
	cout<<ans;//I AK CSP-J!
	return 0;
}//逊到没话说 
orz 自然也有很多,大多数都是普通地放在了缺省源里膜一群人,但是 CQ-J00245 几乎缝合了所有能让他上奇人大赏的元素(下面是他的 T3 代码全文):
//O(3n+nlogn),炸了…… 
#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <iomanip>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
int sro=0,orz=0,kkk=0,sc03=0;
string qwq={"0"},jg={"0"},tmp={"0"};
bool ans;
int find(const char a,string b,int point) { for(int iiiii = 0;iiiii <= point;iiiii++) { if(int(b[iiiii]) == int(a)) return iiiii;} return -1; }
int ffind(const char a,string b,int point) { for(int iiiii = b.length();iiiii >= point;iiiii--) { if(b[iiiii] == a) return iiiii;} return -1; }
void init()
{
	for(int iii = 0;iii <= qwq.length();iii++)if(qwq[iii] == '&')if(qwq[iii-1] == ')' )qwq.insert(find('(',qwq,iii-1),"(");else if (qwq[iii+1] == '(')qwq.insert(ffind(')',qwq,iii-1),"(");else qwq.insert(iii-1,")");
	for(int iii = 0;iii <= qwq.length();iii++)if(qwq[iii] == '|')if(qwq[iii-1] == ')' )qwq.insert(find('(',qwq,iii-1),"(");else if (qwq[iii+1] == '(')qwq.insert(ffind(')',qwq,iii-1),"(");else qwq.insert(iii-1,")");
}
int ccf(int start,int end)		//判短路的 
{
	for(int ii = start;ii <= end;ii++)if(qwq[ii] == '0' && qwq[ii+1] == '&') {sro++;return 0;}else if(qwq[ii] == '1' && qwq[ii+1] == '|') {orz++;return 1;}
}
bool csp(string noip)				//运算用的 
{
	for(int i = 0;i <= noip.length();i++) if(noip[i] == ')' && noip[i-1] != ')' && noip[i-3] != ')') sc03 -= 4,jg[sc03] = (ccf(ffind('(',noip,i)+1,i-1) == 1) ? '1' : '0';else jg[sc03] == noip[i],sc03++;
	while(jg.length() != 1) csp(noip);
	if(jg == "0") return false;
	return true;
}
int main()
{
	freopen("expr.in","r",stdin);freopen("expr.out","w",stdout);
    std::ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	cin >> qwq;
	init();
	ans = csp(qwq);
	cout << ans << endl << sro << orz;
	fclose(stdin);fclose(stdout);
    return 0;
}
CQ-J00256 著名了自己的代码,在一众代码中脱颖而出。对,那是我。
CQ-J00211 大神在他的 T3 代码里模拟了样例的表达式树,很难以置信这是考场作品:
/*
______________________________________________________________________________
|                              0&(1|0)|(1|1|1&0)                             |
|____________________________________________________________________________|
|                          |                        |                        |
|        (  or  )          |           1            |           .            |
|      /          \        |      /        \        |      /        \        |
|   (and)         (or)     |     0          1       |     !          !       |
|    / \          /  \     |    / \        / \      |    / \        / \      |
|   0  (or)    (or) (and)  |   0   1      1   0     |   ?   !      !   .     |
|      /  \    /  \  / \   |      / \    / \ / \    |      / \    / \ / \    |
|     1    0  1    11   0  |     1   0  1   11  0   |     ?   ?  ?   ??  ?   |
|__________________________|________________________|________________________|
|                          |         |         |      or      |     and      |
|   0&(1|0)|(1|1|1&0)      |         |         |______________|______________|
| = 0&1|(1|1|0)            | 1|0     | or      | 0     | 1    | 0     | 0    |
| = 0&1|(1|0)              | 1|0     | or      | 1     | 2    | 0     | 0    |
| = 0&1|1                  | 0&1     | and     | 2     | 2    | 0     | 1    |
| = 0|1                    | NULL    | NULL    | 2     | 2    | 1     | 1    |
| = 1                      |         |         |       |      |       |      |
|__________________________|_________|_________|_______|______|_______|______|
|                 or                  |                  and                 |
|_____________________________________|______________________________________|
|                 2                   |                   1                  |
|_____________________________________|______________________________________|
*/
通过全字匹配 I 加上一个空格,我们得到了一些诗歌和句子。
CQ-J00010 选手放弃挣扎 T3:else printf("I don't want to solve this.");。
CQ-J00184 选手的字符画缺省源:
/*
EEEEE V       V EEEEE RRRR  Y   Y  OOO  NN   N EEEEE     A     K  K   CCC  SSSS PPPP  ! !  1
E      V     V  E     R   R  Y Y  O   O N N  N E        AAA    K K   C    S     P   P ! ! 11
EEEEE   V   V   EEEEE RRRR    Y   O   O N  N N EEEEE   A   A   KK    C     SSS  PPPP  ! !  1
E        V V    E     R R     Y   O   O N   NN E      AAAAAAA  K K   C        S P          1
EEEEE     V     EEEEE R  RR   Y    OOO  N    N EEEEE A       A K  KK  CCC SSSS  P     ! ! 111
*/
/*
III     A     K  K   CCC  SSSS PPPP  ! !  1
 I     AAA    K K   C    S     P   P ! ! 11
 I    A   A   KK    C     SSS  PPPP  ! !  1
 I   AAAAAAA  K K   C        S P          1
III A       A K  KK  CCC SSSS  P     ! ! 111
*/
以及他的 贪吃蛇人 T1。
(这次绘画高手是真的多)
CQ-J00189 也著名了代码,他是 @Linkwish,下面是他的自我介绍缺省源:
//Linkwish's code
/*
Here is Linkwish
You can find me on Luogu.
Hope I can get good grades.
*/
CQ-J00293 选手是老熟人啊,去年的 Xiaoting 我都还历历在目:
//I Love XiaoTing!!! 
//I Love XiaoTing!!! 
//I Love XiaoTing!!! 
//I Love XiaoTing!!! 
CQ-J00408 选手企图让 CCF 听到自己的心声://I LOVE CCF FOREVER!!!。
CQ-J00449 选手的 T3 放弃宣言://I gave up.。
检索 love 找到了十份代码,有 CQ-J00163 的 //still love 2022 511;,和 CQ-J00248 选手的真诚的爱:
/*CSP-J RP++!*/
/*
I'm MYH.
I love LJX.
Although both he and I are boys. 
*/
也有我的整活:
//@StayAlone loves @Frightened
//@L_h_ loves Liu Lexuan
//@Frightened loves Shen Lixindi
//@StayAlone loves @Coco_13fl
//@Hooch loves Hooch
//@Zealous_YH loves Griffin, Spade Su and so on!(His 35 best friends!)
还有去年也有的浑水摸鱼 void slove() 人 CQ-J00036。
后记
欢迎在评论里面给出更多的代码,我会加。
如果你想撤下可以私信我,我看到了就撤。
谢谢大家观看!祝大家官方成绩 RP++!
说一下我的整活:除了各种 love 那一份以外,我的每一份代码最后一行都是一首我喜欢的歌的名字。我的每一份代码都有著名,著名第二行是我的好朋友的名字。(今年时间不太够,也没什么想法去整活,抱歉/kk)

                
            
        
浙公网安备 33010602011771号