炸死老师的完全不可读代码(C++)
2025-07-07 10:09:39
发布于:广东
观前提示
这里的代码都可以在C++11正常运行,但是千万不要 (?)[1]用在正式考试
崩了别来偷我家马桶
原理区
众所周知[2]:
- 因为某些神秘特性,
a[i]
和i[a]
效果相同(大概内部判断是两个量的相加之类?) - 可以使用
#define int long long
来开long long[3] #include_next
可以代替#include
- 可以将标准的
for(int i = 1;i <= n;i++)
变成for(int i = 2;i <= n + 1;i ++)
记得把所有i
变成i-1
- 减少不必要空格和换行[^4]对程序编译无影响
于是我们可以得到:
实践区
随便刨了一道题来
T33994.得到更多分数的最少关卡数目
普及-
题目描述
给定一个长度为 n
的数组 possible
:0
表示困难关卡,1
表示简单关卡。
规则:
从左往右依次完成关卡,
Bob 完成剩余关卡。
简单关卡得 1 分,困难关卡扣 1 分。
每个玩家都至少需要完成 1 个关卡。
目标:找出Alice 至少需要完成多少关卡,才能比Bob 得分高;如果无法实现,返回 −1。
输入格式
第一行输入一个整数 n
,表示关卡的数量。
第二行输入一个长度为 n
的数组 possible
,表示每个关卡的模式:
1
表示简单模式;
0
表示困难模式。
输出格式
输出一个整数,表示 Alice 获得比Bob 更多分数所需要完成的最少关卡数目。如果无法达成,则返回−1
。
代码示例
原版代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
ll a[2000010],s[2000010],n;
int main(){
cin >> n;
for(ll i = 1;i <= n;i++){
cin >> a[i];
s[i] = s[i - 1] + (a[i] == 1 ? 1 : -1);
}
for(ll i = 1;i < n;i++){
ll A = s[i],B = s[n] - s[i];
if(A > B){
cout << i;
return 0;
}
}
cout << -1;
}
魔改·可读性归零代码:
#include_next<bits/stdc++.h>
using namespace std;
#define int long long
int a[2000010],s[2000010],n;
signed main(){
cin>>n;
for(int i=2;i<=n+1;i++){
cin>>i[a-1];
i[s-1]=i[s-2]+(i[a-1]==1?1:-1);}
for(int i=2;i<n+1;i++){
int A=i[s-1],B=n[s]-i[s-1];
if(A>B){
cout<<i-1;
return 0;}}
cout<<-1;}
差点被老师抽死
更新日志
2025/7/5增加了i = 2
开始的循环和解除空格。同时为了至少看得懂保留换行。花括号除外。同时发现魔改代码错了所以重写了。
2025/7/5把上次发布炸掉的代码块修了。
全部评论 9
诡异啊
太诡异了2025-07-05 来自 广东
1为什么没人
2025-06-18 来自 广东
1顶啊
为什么没流量
我要黑化
2025-06-02 来自 广东
1我猜:
a[i] = i[a]
可能是[]
的原理。
执行cout << a;
可以发现输出为一个数字,是一个地址。
假设a
输出的地址是2333
,i
为0
,那么:
a[i]
=2333 + 0
(为地址)
i[a]
=0 + 2333
(为地址)
最后得到的地址都是一样的,得到的也是一样的。
还有可以把除了头文件以外所有结尾为;
后面的换行删掉,不然他们搞这个有何意义?
PS:有些工具就是专门删掉 JavaScript 文件中的换行、空格的。2小时前 来自 浙江
0纠正:
cout << a;
的结果为十六进制,也就是我们要假设其输出结果为 (2333)。2小时前 来自 浙江
0如果大家不信的话,请自行测试。
如果你有更准确 or 有依据的说法,请在下面评论。2小时前 来自 浙江
0因此,我们可以将文中的代码改为如下代码:
#include_next<bits/stdc++.h> #define int long long using namespace std;int a[2000010],s[2000010],n;signed main(){cin>>n;for(int i=2;i<=n+1;i++){cin>>i[a-1];i[s-1]=i[s-2]+(i[a-1]==1?1:-1);}for(int i=2;i<n+1;i++){int A=i[s-1],B=n[s]-i[s-1];if(A>B){cout<<i-1;return 0;}}cout<<-1;}
实测编译通过。
2小时前 来自 浙江
0
但是因为你是举报专家,所以举办了(
2025-06-02 来自 广东
0?
认错人了吧2025-06-03 来自 广东
1
诡异
2025-06-02 来自 广东
06
2025-05-28 来自 天津
0顶!
顶!2025-05-24 来自 广东
0顶!
顶!2025-05-24 来自 广东
0
有帮助,赞一个