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. UIPageControl---iOS-Apple苹果官方文档翻译

    本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址 //转载请注明出处--本文永久链接:http://www.cnblogs.com/Ch ...

  2. TDD随想录

    TDD随想录 谨以本文献给TDD的开创者与传播者 本文纯属个人经历,如有雷同纯属巧合 我从不觉得自己是一个好的程序员,甚至可能连合格都谈不上,不过在内心深处我却渴望着在编程这件事上获得成功. 可惜每次 ...

  3. this的九种常用场景(转子jb51.net)

    [场景1]全局环境中的this指向全局对象 ; alert(a); b = ; alert( ; [场景2]对象内部函数的this指向调用函数的当前对象 ; var bar = { a: , test ...

  4. 打开Android系统安装APK的页面

    //使用隐式意图开启安装APK的Activity Intent intent = new Intent("android.intent.action.VIEW"); intent. ...

  5. python调参神器hyperopt

    一.安装 pip install hyperopt 二.说明 Hyperopt提供了一个优化接口,这个接口接受一个评估函数和参数空间,能计算出参数空间内的一个点的损失函数值.用户还要指定空间内参数的分 ...

  6. hadoop2.4.1伪分布式环境搭建

    注意:所有的安装用普通哟用户安装,所以首先使普通用户可以以sudo执行一些命令: 0.虚拟机中前期的网络配置参考: http://www.cnblogs.com/qlqwjy/p/7783253.ht ...

  7. Low overhead memory space management

    Methods, apparatus, and systems, including computer programs encoded on a computer storage medium, m ...

  8. linux编程之信号

    信号(signal)机制是UNIX系统中最为古老的进程之间的通信机制,它用在一个或多个进程之间传递异步信号,信号可以由各种异步事件产生,如: 键盘中断等等,在Linux 的shell 中,也可以使用信 ...

  9. 自动化测试===Macaca环境搭建和说明书

    https://www.cnblogs.com/tim2016/p/6400326.html http://www.cnblogs.com/fnng/p/5873878.html https://ww ...

  10. 3D Studio Max [www]

    https://github.com/RealityFactory/Exporters https://github.com/code-google-com/3ds-max-dev https://g ...