卡常神器——register 与 快速读入输出

快速读入模板

int read() {
    int s = 0, w = 1;
    char ch = getchar(); //getchar() 一次从键盘读入一个字符
    while (ch <=‘0‘ || ch > ‘9‘) {
        if (ch == ‘-‘) w = -1;
        ch = getchar();
    }
    while (ch >= ‘0‘ && ch <= ‘9‘) {
        s = s * 10 + ch - ‘0‘;
        ch = getchar();
    }
    return s * w;
}

快速输出模板

inline void write(int x) { // inline 可以防止爆栈,虽然现在一般不太会
    if (x < 0) putchar(‘-‘), x = -x;
    if (x > 9) write(x / 10);
    putchar(x % 10 + ‘0‘);
}

register

register 就是CPU寄存器的意思,这个里面的变量要比放在内存里读取快很多,所以想下面for循环里的变量i就可在声明这个变量的时候加上register可以让for循环快很多。但是register的空间很小,一般也就几MB的样子,服务器的CPU可能会更大一些。如果寄存器用完了即使你的变量声明的时候带上register也不会放进寄存器里面。

for (register int i = 1; i <= 1000000; ++i) {
    printf("%d\n", i);
}

原文地址:https://www.cnblogs.com/lixiao189/p/9744655.html

时间: 2024-07-29 23:39:12

卡常神器——register 与 快速读入输出的相关文章

【模版】快速读入/输出

快速读入模版 template < class T > inline void read(T &x) { x = 0; char c = getchar(); bool f = 0; while (!isdigit(c)) { f ^= c == '-'; c = getchar(); } while (isdigit(c)) { x = (x << 3) + (x << 1) + (c ^ 48); c = getchar(); } if (f) x = ~x

快速读入输出模板

inline int read() { char ch = getchar(); int x = 0, f = 1; while(ch < '0' || ch > '9') { if(ch == '-') f = -1; ch = getchar(); } while('0' <= ch && ch <= '9') { x = x * 10 + ch - '0'; ch = getchar(); } return x * f; } inline void put(i

常用快速读入快速输出

此文为博主原创,转载时请通知博主,并把原文链接放在正文醒目位置. 简要介绍 众所周知,就运行速度而言,getchar()快于scanf快于cin,putchar()快于printf快于cout. 但getchar()和putchar()每次只能操作一个字符,使用起来比较麻烦. 于是就出现了快读.快速输出. 它们的原理都是把需要读入\输出的数字(本文只能用于处理整数)一位一位地输出,从而减少运行时间. 代码 1 #include<cstdio> 2 using namespace std; 3

时间卡常技巧

以下内容出自: 时间卡常技巧 先放一句话镇场: 我觉得,卡常数的出题人都是xx,这违背了算法竞赛考察思路的初衷 ——LYD 推荐:论OI中各种玄学卡常 我们一般说的复杂度都是O(n)O(n^2)O(nlogn)是一个级别. 但是我们其实每一个步可能计算很多次,然后会乘上一个2*n,3*n,甚至10*n 我们都叫O(n) 这个乘上的数就是常数.有的时候,你(chu)自(ti)己(ren)的(sang)程(xin)序(bing)可(kuang)能(ka)常(chang)数(shu)太(qwq)大(Q

论OI中各种玄学卡常

当你在写程序的时候一般出现过这种无比悲剧的情况: 你讨厌卡常?下面有二则小故事: 作为一个经常出题的人,其实很多时候出题时的画风是这样的:"我有一个绝妙的\(O(nlog^2n)\)的算法,我来出道题吧""咦怎么只能跑 \(5w\) 啊,好咸鱼啊,我要让它能跑 \(10w\),嗯现在 \(10w\) 只要 \(0.3s\) 了,要不努把力跑个 \(20w\) 吧"然后就没有然后了.. 开O2之后FFT会比不开快几倍? 不开\(O2\):\(NTT\)比\(FFT\)

快读(快速读入)有多快(未完结)

在一些题目中,有的程序会被卡常(数),就是说,程序虽然渐进复杂度,(通俗来讲,算法的时间复杂度)可以接受,但因为算法本身的时间常数过大,导致程序在一些算法竞赛中超时.这是,快读就显得尤为重要了. 当然,如果程序算法本身就不高效,快读就更加重要了,可以让一些 快速读入可以让大家的输入更快 #include <cstdio>#include <ctime>#include <iostream>#define LOOP 3#define DATA 10000inline in

[CSP-S模拟测试]:卡常题/b(基环树+DP)

题目描述 $ρ$有一个二分连通无向图,$X$方点.$Y$方点均为$n$个(编号为$1\sim n$).这个二分图比较特殊,每一个$Y$方点的度为$2$,一条黑色边,一条白色边.所有黑色边权值均为$a$,所有白色边权值均为$b$.选择一个$X$方点,代价为连接的所有边的权值之和.激活一个$Y$方点,需要选择至少一个与之相邻的$X$方点.现在,$ρ$想激活每个$Y$方点,他想知道最小的总代价.不过$ρ$很善良,他给你开了$O2$优化.这样你就不会被卡常了.当然,除非你真的连读入优化都不想写,或者常数

[模板] 快速读入

//一个跟hyj巨佬学来的快速读入模板 卡常大佬不愧是卡常大佬 1 bool isdigit(char ch) 2 { 3 if(ch>='0'&&ch<='9') return 1; 4 return 0; 5 } 6 inline void fastin(int &v) 7 { 8 static char ch; 9 v=0; 10 bool p=0; 11 do 12 { 13 ch=getchar(); 14 if(ch=='-') p=1; 15 }while

读入输出优化_C++

当我们考试时遇到大量的读入或者输出时,这些代码会耗费许多运行程序的时间,导致TL 本来 log2n 的算法因为读入被卡成线性的就太不划算了,所以我们这里要采用读入输出优化 getchar 和 putchar 是最快的读入输出方式,变量名尽量用一些不是很常用的,以免冲突 1 #include<cstdio> 2 #include<cstdlib> 3 #include<cstring> 4 #include<cmath> 5 #include<iostr