C和C++有了#define,从此它就变了模样

宏命令就是#define,#if,#error之类的

本文主要介绍宏命令和相关的骚操作

读入输出优化

inline int read()
{
int ans=0,f=1;
char c=getchar();
while (!isdigit(c))
{
if (c=='-')
f=-1;
c=getchar();
}
while (isdigit(c))
{
ans=(ans<<3)+(ans<<1)+(c^48);
c=getchar();
}
return ans;
} void write(const int& x)
{
if (x<0)
{
putchar('-');
write(-x);
}
if (x<10)
{
putchar(x+'0');
return 0;
}
write(x/10);
putchar(x%10+'0');
}

这是比较基础的

如果没有负数可以再改一下

inline int read()
{
int ans=0;
char c=getchar();
while (!isdigit(c))
c=getchar();
while (isdigit(c))
{
ans=(ans<<3)+(ans<<1)+(c^48);
c=getchar();
}
return ans;
} void write(const int& x)
{
if (x<10)
{
putchar(x+'0');
return 0;
}
write(x/10);
putchar(x%10+'0');
}

上次看到一份神级读优:

#include <cstdio>
#include <cctype>
struct IO
{
#define S 32768
char buf[S];int len = 0,pos = 0;
char buf2[S],*p = buf2;
inline char __getchar()
{
if (pos == len)pos = 0,len = fread(buf,1,S,stdin);if(pos == len)return '\0';
return buf[pos++];
}
inline void __putchar(char c) {if(p == buf2 + S)fwrite(buf2,1,S,stdout),p = buf2;*p++ = c;}
inline void flush(){fwrite(buf2,1,p - buf2,stdout);}
inline int getint()
{
register int num = 0;register char ch = __getchar();for(;!(isdigit(ch));ch = __getchar());
for(;isdigit(ch);ch = __getchar())num = (num << 3) + (num << 1) + (ch ^ '0');return num;
}
inline void putint(int x){if(x < 0){__putchar('-');x = -x;}if(x > 9)putint(x / 10);__putchar(x % 10 + 48);}
inline void putll(int x){if(x < 0){__putchar('-');x = -x;}if(x > 9)putll(x / 10);__putchar(x % 10 + 48);}
inline void newline(){__putchar(10);}
inline char getupper(){register char ch = __getchar();for(;!isupper(ch);ch = __getchar());return ch;}
}io;

lld

我们经常用long long,而long long格式化输出有%I64d和%lld两种,有时又只能用一种

那只需要加这段语句就好了:

#ifdef WIN32
#define lld "%I64d"
#else
#define lld "%lld"
#endif

输出的时候:

printf("a="lld",b="lld,a,b);

当然最好还是用cout或手写

调试语句

调试时候一般用gdb

然而gdb很容易炸

于是只好用输出中间值

然后忘了注释,然后挂了

其实C++里有一个输出流:cerr

它可以无视文件操作而输出到屏幕上

也就是说,在NOIP中,你即使忘了删也不会出错

当然最好还是删了,毕竟运行需要时间

用法和cout一样

cerr<<a<<' '<<b<<endl;

你输出了中间值,然而发现根本不知道哪个值是什么变量

那就加一句:

#define debug(x) cerr<<#x<<':'<<x<<endl

#x表示标识符x实际代表的变量名。注意只能在#define中使用

这样,就可以直接调用debug来输出中间值了

占坑,想到再写吧

C++中的读入输出优化及清新脱俗的宏命令的更多相关文章

  1. 读入输出优化_C++

    当我们考试时遇到大量的读入或者输出时,这些代码会耗费许多运行程序的时间,导致TL 本来 log2n 的算法因为读入被卡成线性的就太不划算了,所以我们这里要采用读入输出优化 getchar 和 putc ...

  2. C++读入输出优化

    读入输出优化虽然对于小数据没有半点作用,但是对于大数据来说,可以优化几十ms. 有时就是那么几十ms,可以被卡掉大数据的点 读入优化 int read() { int x=0,sig=1; char ...

  3. c++ 读入优化、输出优化模板

    0. 在有些输入数据很多的变态题中,scanf会大大拖慢程序的时间,cin就更慢了,所以就出现了读入优化.其原理就是一个一个字符的读入,输出优化同理,主要使用getchar,putchar函数. 1. ...

  4. C++ 读入优化&输出优化

    读入优化:读入优化只是针对整数,由于getchar()读字符非常的快,所以采用getchar()来进行读入,下设输入的数为x 负数处理:用一个标志变量f,开始时为1,当读入了'-'时,f变为-1,最后 ...

  5. 读入优化&输出优化

    读入优化 int read() { ; ') ; '; ') num=num*+c-'; return ff*num; } 输出优化 void write(int x) { ) { putchar(' ...

  6. 【CSP模拟赛】天才绅士少女助手克里斯蒂娜(线段树&读入优化&输出优化)

    题面描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响.选取显像管的任意一个平面,一开始平面内有个n电子,初始速度分别为vi,定义飘升系数为 $$\sum_{1\leqsl ...

  7. 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析 + Spark Streaming 概述、运行、解析 + DStream 的输入、转换、输出 + 优化

    第1章 Spark Streaming 概述1.1 什么是 Spark Streaming1.2 为什么要学习 Spark Streaming1.3 Spark 与 Storm 的对比第2章 运行 S ...

  8. c++ 快速读入输出

    1. 读入优化 C++中有一个函数:getchar() ,用于读入字符,那么这跟读入整数有什么关系呢? 其实,经过类似高精度的处理,就可以实现类型转换啦! 下面是正负数读入优化模板: #include ...

  9. 关于OI中简单的常数优化

    有些东西借鉴了这里qwq 1.IO(istream/ostream) 输入输出优化 之后能,在赛场上常见的几种输入输出: 输入: $1.cin$ 呵呵,不说什么了,慢的要死.大概$1e8$个数要读1分 ...

随机推荐

  1. Html5学习3(拖放、Video(视频)、Input类型(color、datetime、email、month 、number 、range 、search、Tel、time、url、week ))

    1.Html拖放 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> < ...

  2. 【洛谷 P2763】 试题库问题(最大流)

    题目链接 6/23 这是网络流23题里我第一个没看题解自己写出来一遍过的.. 这题应该是最简单的模型了吧. 从源点向每个类型连一条流量为这个类型要的题数,再从每个类型向可以属于这个类型的所有试题连一条 ...

  3. dot.js使用心得

    一.dot.js介绍 最近用到的数据模板引擎有很多,今天讲的doT.js也是其中一种. doT.js的特点是体积小,速度快,并且不依赖其他插件. 官网下载:http://olado.github.io ...

  4. 9.0docker的数据管理

    dopcker容器的数据卷          为容器添加数据卷 sudo docker run -v  ~/container data:/data  -it ubuntu /bin/bash   查 ...

  5. Python3 面向对象编程高级语法

    1.静态方法: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # Author:CarsonLi class Dog(object): def __init ...

  6. vs 2015 插件 supercharger 破解方式

    亲测有效:效果如图 方法如下: 1.打开Supercharger的options; 2.点击Pricing & Registration 3.复制 license  然后再按Paste &am ...

  7. JavaScript知识点的总结

    一.Javascript的含义 是一种解释性的语言,主要给网页添加各色各样的动态功能,同时为用户提供浏览效果. 二.JavaScript的主要特点 1. 简单性 2. 动态性 3. 安全性 4. 跨平 ...

  8. 3.Python3标准库--数据结构

    (一)enum:枚举类型 import enum ''' enum模块定义了一个提供迭代和比较功能的枚举类型.可以用这个为值创建明确定义的符号,而不是使用字面量整数或字符串 ''' 1.创建枚举 im ...

  9. NOI openjudge 1792.迷宫

    一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行.同时当Extense处在某个格点时,他只 ...

  10. 解决Myeclipse编译不生成.class文件问题

    1.Project --> clean...  如果该操作无效,请执行2. 2.Preferences -->Java -->Compliler -->Building --& ...