C++中的读入输出优化及清新脱俗的宏命令
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++中的读入输出优化及清新脱俗的宏命令的更多相关文章
- 读入输出优化_C++
当我们考试时遇到大量的读入或者输出时,这些代码会耗费许多运行程序的时间,导致TL 本来 log2n 的算法因为读入被卡成线性的就太不划算了,所以我们这里要采用读入输出优化 getchar 和 putc ...
- C++读入输出优化
读入输出优化虽然对于小数据没有半点作用,但是对于大数据来说,可以优化几十ms. 有时就是那么几十ms,可以被卡掉大数据的点 读入优化 int read() { int x=0,sig=1; char ...
- c++ 读入优化、输出优化模板
0. 在有些输入数据很多的变态题中,scanf会大大拖慢程序的时间,cin就更慢了,所以就出现了读入优化.其原理就是一个一个字符的读入,输出优化同理,主要使用getchar,putchar函数. 1. ...
- C++ 读入优化&输出优化
读入优化:读入优化只是针对整数,由于getchar()读字符非常的快,所以采用getchar()来进行读入,下设输入的数为x 负数处理:用一个标志变量f,开始时为1,当读入了'-'时,f变为-1,最后 ...
- 读入优化&输出优化
读入优化 int read() { ; ') ; '; ') num=num*+c-'; return ff*num; } 输出优化 void write(int x) { ) { putchar(' ...
- 【CSP模拟赛】天才绅士少女助手克里斯蒂娜(线段树&读入优化&输出优化)
题面描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响.选取显像管的任意一个平面,一开始平面内有个n电子,初始速度分别为vi,定义飘升系数为 $$\sum_{1\leqsl ...
- 大数据技术之_19_Spark学习_04_Spark Streaming 应用解析 + Spark Streaming 概述、运行、解析 + DStream 的输入、转换、输出 + 优化
第1章 Spark Streaming 概述1.1 什么是 Spark Streaming1.2 为什么要学习 Spark Streaming1.3 Spark 与 Storm 的对比第2章 运行 S ...
- c++ 快速读入输出
1. 读入优化 C++中有一个函数:getchar() ,用于读入字符,那么这跟读入整数有什么关系呢? 其实,经过类似高精度的处理,就可以实现类型转换啦! 下面是正负数读入优化模板: #include ...
- 关于OI中简单的常数优化
有些东西借鉴了这里qwq 1.IO(istream/ostream) 输入输出优化 之后能,在赛场上常见的几种输入输出: 输入: $1.cin$ 呵呵,不说什么了,慢的要死.大概$1e8$个数要读1分 ...
随机推荐
- 高精度模板_C++
高精度压位,压9位 read:读入 write:输出 copy:赋值 change:交换 empty:清0 cmp:比较大小,相当于小于号 plus:加法 dec:减法 multy:乘法 除法实在不会 ...
- hdu 3790 最短路径问题(双重权值,dijkstra算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3790 题目大意:题意明了,输出最短路径及其花费. 需要注意的几点:(1)当最短路径相同时,输出最小花费 ...
- 灵活使用ARM汇编的WEAK关键字
//=====================================================================//TITLE:// 灵活使用ARM汇编的WEAK关 ...
- mysql cast函数
CAST函数语法规则是:Cast(字段名 as 转换的类型 ),其中类型可以为: CHAR[(N)] 字符型 DATE 日期型DATETIME 日期和时间型DECIMAL float型SIGNED i ...
- FAN54015 充電電流 軟硬體設定
Ex1: Vrsense 選 37.4 mV --- 在第二張圖 Rsense 選 50 mΩ --- 在第三張圖 37.4 / 50 = 748 mA Ex2: Vrsense 選 44.2 mV ...
- CNN中千奇百怪的卷积方式大汇总
1.原始版本 最早的卷积方式还没有任何骚套路,那就也没什么好说的了. 见下图,原始的conv操作可以看做一个2D版本的无隐层神经网络. 附上一个卷积详细流程: [TensorFlow]tf.nn.co ...
- ffmpeg安装与配置
wget http://www.ffmpeg.org/releases/ffmpeg-3.1.tar.gz tar -zxvf ffmpeg-3.1.tar.gz cd ffmpeg-3.1 ./co ...
- tomcat8特性
作者:Eilen,转载需注明.博客主页:http://www.cnblogs.com/Eilen/ 一.Apache Tomcat 8介绍 Apache Tomcat 8RC1版于前几日发布.它 经过 ...
- jQuery使用blur()方法触发两次的解决方法
在项目中的textarea在是去焦点时对文本内容进行验证,这时候使用了blur方法,但是实现时blur的回调函数执行了两次,这里我也不知道为什么,然后就尝试先解除blur事件绑定,然后再绑定blur事 ...
- 并发容器ConcurrentHashMap与synchronized联合使用达到线程安全
http://blog.csdn.net/yansong_8686/article/details/50664338 map.put(KEY, map.get(KEY) + 1); 实际上并不是原子操 ...