SCP 我们读题,思考,摆烂(CSP 注意事项)

有好多是复制的

注意事项

考试风貌

当你来到考场:

上机测试时多敲敲键盘,顺手的键盘都需要敲打一番~(提前熟悉键盘的各个键——经常会与自己学校的不一样)

根据个人需求并在合理时间内待在考场里,熟悉一下气氛。

别理别人。

自始而终别对拿大奖有太大执念,得之我幸失之我命。 执念过深反而是负担。

做个素质人,坚守职业操守,和生活美德。分可以丢,但做人最基本的原则不能没有。是啥应该不用我说(玩烂梗)。


考试ing:

检查文件的扩展名是否显示,若不显示,一定要将扩展名显示出来。

无视旁人,做丫的题。

思考时间超过 0.5~1h 就放松一下,一直不停脑袋会乱的。

无论附近的人键盘敲多大声,你都不要管他,实在不行心中默念:“不是我的(指键盘)不是我的不是我的不是我的...”当然不想忍记得举报

好好读题

咱举个例子,你们仔细观察下面这段描述:

具体我不说了,你品,你细品~

拼了你的老命去卡你的代码!

这题你会,不要发出愉悦♂的声音,不会,也不要发出愉悦的♂声音。不要影响其他人

离开时垃圾带走,别落下什么东西。(之前我把饭卡落下了,结果人家托人送回来了,感动 QWQ


考完了:

别 fake

其他

代码

注意 C++14 的编译环境,vector double 等的新用法或改变
如果有非常奥妙的操作,啥数据结构都维护不了,那试试分块吧。

调试

可以定义标识符来进行本地调试

#define FUCK
#ifdef FUCK
 //do something interesting
#endif
// or
#ifndef FUCK
 //do something interesting
#endif

#ifdef 会检查程序中是否有通过 #define 定义的对应标识符,如果有定义,就会执行下面的内容,#ifndef 相反,在没有定义相应标识符的情况下执行后面的语句。

我们提交程序的时候,只需要将 #define FUCK 一行注释掉即可。

对拍

写了份代码,但是不知道它对不对。

如果时间足够,写对拍。

原料:一份暴力(或其他非正解),一份你写的薛定谔的正解,一份数据生成器

当然,我们不能自己比对两段程序的输出,所以我们需要通过批处理的方法来实现对拍的自动化,要不然太慢了。

每次运行一次数据生成器,将生成的随机数据写入输入文件,通过重定向的方法使两个程序读入数据,并将输出写入指定文件,利用 Windows 下的 fc 命令比对文件(Linux 下为 diff 命令)(YLCH 讲过),从而检验程序的正确性。

如果发现程序出错,可以直接利用刚刚生成的数据进行调试

模板

#include <bits/stdc++.h>

using namespace std;

signed main () {
    //For Windows
    while (1) {
        system("gen > test.in");//数据生成器将生成数据写入输入文件
        system("test1.exe < test.in > a.out"); //获取程序1输出
        system("test2.exe < test.in > b.out"); //获取程序2输出
        if(system("fc a.out b.out")) {
            //该行语句比对输入输出
            //fc返回0时表示输出一致,否则表示有不同处
            system ("pause"); //方便查看不同处
            return 0;
            //该输入数据已经存放在test.in文件中,可以直接利用进行调试
        }
    }
}

关于随机数据生成

  1. 在使用 rand() 前,别忘了调用 srand(time(NULL)) 来重置随机数种子。(不重置的话,每次调用 rand() 只会得到一套随机数)
  2. rand() 的生成随机数范围在 Windows 下为 [0,32767] ,在 Linux 下为 [0,2311],所以如果数据过大,最好手写一个随机数生成器。

防爆

常按 Ctrl + S 是个不错的习惯。

空间允许的情况下,记得开 long long,但不要动不动就 #define int long long 看好空间。

有了更好的思路?当前代码不要删,注释掉或重开一个文件,说不定以后会用。

最后几分钟,查看 freopen,编译运行一遍。

凡是位运算全部加 () !!!/fn

慎重使用短路评估,位运算等价宏

定义为
and &&
and_eq &=
bitand &
bitor |
compl ~
not !
not_eq !=
or ||
or_eq |=
xor ^
xor_eq ^=

输入输出量大的记得写快读快出

template <typename T>
inline void read (T &a) {
	T x = 0, f = 1;
	char ch = getchar ();
	while (! isdigit (ch)) {
		(ch == '-') and (f = 0);
		ch = getchar ();
	}
	while (isdigit (ch)) {
		x = (x << 1) + (x << 3) + (ch ^ '0');
		ch = getchar ();
	}
	a = f ? x : -x;
}
template <typename T, typename ...A>
inline void read (T &t, A &...a) {
	read (t), read (a...);
}
template <typename T>
inline void print (T x) {
	if (x < 0) putchar ('-'), x = -x;
	if (x > 9) print (x / 10);
	putchar (x % 10 + '0');
}

signed main () {
	int a, b, c;
	read (a, b, c);
}

实测自己写 inline int abs/max/min 要比 C++ 自带的快一丢丢

递归函数不要加 inline,逆优化。

最后祝各位

CSP RP++

posted @   aleph_blanc  阅读(165)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示