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


    有好多是复制的

    注意事项

    考试风貌

    当你来到考场:

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

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

    别理别人。

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

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


    考试ing:

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

    无视旁人,做丫的题。

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

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

    好好读题

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

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

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

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

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


    考完了:

    别 fake

    其他

    代码

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

    调试

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

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

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

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

    对拍

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

    如果时间足够,写对拍。

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

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

    每次运行一次数据生成器,将生成的随机数据写入输入文件,通过重定向的方法使两个程序读入数据,并将输出写入指定文件,利用 ( ext{Windows}) 下的 fc 命令比对文件(( ext{Linux}) 下为 diff 命令)(( ext{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() 的生成随机数范围在 ( ext{Windows}) 下为 ( ext{[0,32767]}) ,在 ( ext{Linux}) 下为 ([0,2^{31}-1]),所以如果数据过大,最好手写一个随机数生成器。

    防爆

    常按 ( ext{Ctrl + S}) 是个不错的习惯。

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

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

    最后几分钟,查看 ( ext{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);
    }
    

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

    递归函数不要加 ( ext{inline}),逆优化。

    最后祝各位

    (Huge{ ext{CSP RP++}})

  • 相关阅读:
    图像的不变性及解决手段
    007 Go语言基础之流程控制
    008 Go语言基础之数组
    006 Go语言基础之运算符
    004 Go语言基础之变量和常量
    019 Python实现微信小程序支付功能
    018 Python玩转微信小程序
    017 python--微信小程序“跳一跳‘外挂
    016 用python一步一步教你玩微信小程序【跳一跳】
    025 nginx之日志设置详解
  • 原文地址:https://www.cnblogs.com/codingxu/p/15433809.html
Copyright © 2020-2023  润新知