广告
走过路过不要错过!
此处的代码可能有一小部分对你做题有帮助
观前提示
这里的代码都可以在C++11正常运行,但是千万不要 (?)[1]用在正式考试
崩了别来偷我家马桶
原理区
众所周知[2]:
1. 因为某些神秘特性,a[i]和i[a]效果相同(大概内部判断是两个量的相加之类?)
2. 可以使用#define int long long来开long long[3]
3. #include_next可以代替#include
4. 可以将标准的for(int i = 1;i <= n;i++)变成for(int i = 2;i <= n + 1;i ++)
记得把所有i变成i-1
5. 减少不必要空格和换行[^4]对程序编译无影响
于是我们可以得到:
实践区
随便刨了一道题来
T33994.得到更多分数的最少关卡数目
普及-
题目描述
给定一个长度为 n 的数组 possible:0 表示困难关卡,1 表示简单关卡。
规则:
从左往右依次完成关卡,
Bob 完成剩余关卡。
简单关卡得 1 分,困难关卡扣 1 分。
每个玩家都至少需要完成 1 个关卡。
目标:找出Alice 至少需要完成多少关卡,才能比Bob 得分高;如果无法实现,返回 −1。
输入格式
第一行输入一个整数 n,表示关卡的数量。
第二行输入一个长度为 n 的数组 possible,表示每个关卡的模式:
1 表示简单模式;
0 表示困难模式。
输出格式
输出一个整数,表示 Alice 获得比Bob 更多分数所需要完成的最少关卡数目。如果无法达成,则返回−1。
代码示例
原版代码:
魔改·可读性归零代码:
差点被老师抽死
这里附带@𝓬𝓱𝓮𝓷𝓰𝔀𝓶大佬的解释:
我猜:
a[i] = i[a]
可能是 [] 的原理。
执行 cout << a; 可以发现输出为一个数字,是一个地址。
假设 aaa 输出的地址是 233323332333,iii 为 000,那么:
a[i]=2333+0a[i] = 2333 + 0a[i]=2333+0(为地址)
i[a]=0+2333i[a] = 0 + 2333i[a]=0+2333(为地址)
最后得到的地址都是一样的,得到的也是一样的。
还有可以把除了头文件以外所有结尾为 ; 后面的换行删掉,不然他们搞这个有何意义?
> PS:有些工具就是专门删掉 JavaScript 文件中的换行、空格的。
补充:cout << a; 的结果为十六进制,也就是我们要假设其输出结果为 (91d)16=(2333)10(91d)_{16}=(2333)_{10}(91d)16 =(2333)10
更新日志
2025/7/5增加了i = 2开始的循环和解除空格。同时为了至少看得懂保留换行。花括号除外。同时发现魔改代码错了所以重写了。
2025/7/5把上次发布炸掉的代码块修了。
2025/8/17趁着拖堂复制了程韦铭大佬的关于i[a]解释
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1. 其实用一下也。没。问。题。吧。(老师吃人的眼神) ↩︎
2. 并不。 ↩︎
3. 请注意将主函数更改为signed main(){} ↩︎