-
个人简介
取得棕名的方法
首先,我们要知道一般有什么方法在比赛中取得棕名?
-
- 与他人代码重复度过高
-
- 涉嫌使用 AI 代码
在你并没有小号的情况下,这其中显然是第 种方案会更优秀。不仅成功率高,而且不会波及他人,引起不必要的争端。即使有小号,采用第 种方法也未尝不优秀。
具体实现
接下来,我将拆出每一部分单独讲。
Part 1 使自己的代码接近人机
1. 代码格式化
如果您的码风已经是格式化的,请自行跳过
值得注意的是,AI 的缩进是以 tab 长度为单位的。而
for
循环的花括号必然加上。花括号必然压行,但会选择留下一个空格。这些工作大部分可以选择让
ctrl+shift+a
来实现,如下是我在校内模拟赛中的一份代码。与我的码风略有不同,是为了说明它的强大。#include<bits/stdc++.h> using namespace std; #define int long long int n,s,k,now[49],a[49],ans1=1e15,ans2; void dfs(int p,int now,int res) { if(p==k+1) { ans1=min(ans1,res); ans2=max(ans2,res); return; } if(!now) res-=a[p]; else res+=a[p]; if(res>n||res<0) return; dfs(p+1,0,res); dfs(p+1,1,res); } signed main() { freopen("submarine.in","r",stdin); freopen("submarine.out","w",stdout); cin>>n>>s>>k; if(n>100000){ cout<<0<<" "<<n; return 0; } for(int i=1;i<=k;i++){ cin>>a[i]; } dfs(1,0,s); dfs(1,1,s); cout<<ans1<<" "<<ans2<<'\n'; return 0; }
使用
ctrl+shift+a
后的效果如下:#include<bits/stdc++.h> using namespace std; #define int long long int n,s,k,now[49],a[49],ans1=1e15,ans2; void dfs(int p,int now,int res) { if(p==k+1) { ans1=min(ans1,res); ans2=max(ans2,res); return; } if(!now) res-=a[p]; else res+=a[p]; if(res>n||res<0) return; dfs(p+1,0,res); dfs(p+1,1,res); } signed main() { freopen("submarine.in","r",stdin); freopen("submarine.out","w",stdout); cin>>n>>s>>k; if(n>100000){ cout<<0<<" "<<n; return 0; } for(int i=1; i<=k; i++) { cin>>a[i]; } dfs(1,0,s); dfs(1,1,s); cout<<ans1<<" "<<ans2<<'\n'; return 0; }
可以发现其卓有成效。
随后,仿照人机的方式修改代码。我会打上注释说明修改点。
//注意事项1:!now->now!=0,!n&1->n%2==0 //注意事项2:人机会在运算符的两侧加上空格 //注意事项3:人机会在逗号后添加空格 //注意事项4:人机会在输出的内容两侧加上空格 //注意事项5:人机会在 if 或 for 之后加上空格 //注意事项6:人机换行一般使用 endl,打空格一般使用 " " //注意事项7:不要低估人机的智能度,请使用+=,-=等运算符 //注意事项8:2的特例是,如果是+=,-=,当且仅当两端均为数组(vector)时会添加空格 //注意事项9:在头文件,using namespace std ,函数后加空行 #include<bits/stdc++.h> using namespace std; long long n, s, k, now[49], a[49], ans1=1e15, ans2; void dfs(int p, int now, int res) { if(p == k + 1) { ans1 = min(ans1, res); ans2 = max(ans2, res); return; } if (now != 0) res-=a[p]; else res+=a[p]; if (res > n || res < 0) return; dfs(p+1, 0, res); dfs(p+1, 1, res); } int main() { freopen("submarine.in", "r", stdin); freopen("submarine.out", "w", stdout); cin >> n >> s >> k; if (n > 100000) { cout << 0 << " " << n ; return 0; } for (int i = 1; i <= k; i++) { cin >> a[i]; } dfs(1, 0, s); dfs(1, 1, s); cout << ans1 << " " << ans2 << endl; return 0; }
但这还是不够人机,况且人机会在中间搞出一些空行,怎么回事呢?接下来,就要寄出人机的重要武器了——
vector
我们需要将所有数组改为 vector,多维数组改为嵌套式 vector。并且放在函数内,而非全局变量。
在一个 vector 的定义和与其连续的该 vector 的操作后,人机会留下空行。
于是,可以得到如下内容。
-
-
通过的题目
-
最近活动
-
最近编写的题解
This person is lazy and didn't write any solutions. -
Stat
-
Rating
题目标签
- 动态规划
- 8
- dp
- 8
- GESP
- 7
- 2024
- 6
- NOIp 提高组
- 4
- NOIp 普及组
- 4
- 2010
- 3
- 2023
- 3
- 枚举
- 3
- 暴力
- 3
- 递归
- 3
- 区间 dp
- 3
- 2001
- 2
- 2005
- 2
- 2006
- 2
- 模拟
- 2
- 背包
- 2
- 单调队列
- 2
- 数论
- 2
- NOIP
- 2