一开始入c++的时候成天跑cin,cout

直到有一天用cin,cout超时

才知道scanf比cin快的多

但是后来又听说加了ios::sync_with_stdio(false);的cin跟飞一样

那么到底哪个快呢?

咱们来做个小测试

题目选择:https://www.luogu.org/problem/show?pid=3368#sub

     树状数组模板2(因为这题数据比较大)

首先是龟速的cin与cout

成功的T掉三个点

=.=

那么scanf呢??

完美的完成任务!!

身负众望的ios::sync_with_stdio(false);呢??

见证奇迹的时刻。。。

速度虽然不及scanf

但是也是可以AC的

另外不得不提一下超神的读入优化

快于scanf

综上所述:

如果实在懒得敲读入优化

还是乖乖的用scanf吧。。

附代码:

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int n,m;
int a[MAXN];
int tree[MAXN];
int lowbit(int p)
{return p&(-p);} void interval_increase(int x,int v)
{
for(int i=x;i>;i=i-lowbit(i))
{
tree[i]+=v;
}
} int point_ask(int p)
{
int ans=a[p];
for(int i=p;i<=n;i=i+lowbit(i))
{
ans=ans+tree[i];
}
return ans;
}
int main()
{
//ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=m;i++)
{
int how;
cin>>how;
if(how==)// 增加
{
int x,y,v;
cin>>x>>y>>v;
interval_increase(y,v);
interval_increase(x-,-v);
}
else
{
int p;
cin>>p;
cout<<point_ask(p)<<endl;
}
}
return ;
}

龟速的cin

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int n,m,p;
int tree[MAXN];//
int lowbit(int p)
{
return p&(-p);
}
void point_increase(int w,int v)
{
for(int i=w;i<=n;i=i+lowbit(i))
tree[i]=tree[i]+v;
return ;
}
int interval_ask(int x)
{
int ans=;
for(int i=x;i!=;i=i-lowbit(i))
{
ans=ans+tree[i];
}
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
scanf("%d",&p);
point_increase(i,p);
}
for(int i=;i<=m;i++)
{
scanf("%d",&p);
if(p==)// 加
{
int x,y;
scanf("%d%d",&x,&y);
point_increase(x,y);
}
else// 求和
{
int x,y;
scanf("%d%d",&x,&y);
printf("%d\n",interval_ask(y)-interval_ask(x-));
}
}
return ;
}

nice的scanf

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int n,m;
int a[MAXN];
int tree[MAXN];
int lowbit(int p)
{return p&(-p);} void interval_increase(int x,int v)
{
for(int i=x;i>;i=i-lowbit(i))
{
tree[i]+=v;
}
} int point_ask(int p)
{
int ans=a[p];
for(int i=p;i<=n;i=i+lowbit(i))
{
ans=ans+tree[i];
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=;i<=n;i++)
cin>>a[i];
for(int i=;i<=m;i++)
{
int how;
cin>>how;
if(how==)// 增加
{
int x,y,v;
cin>>x>>y>>v;
interval_increase(y,v);
interval_increase(x-,-v);
}
else
{
int p;
cin>>p;
cout<<point_ask(p)<<endl;
}
}
return ;
}

还不错的cin优化

 #include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN=;
int n,m;
int a[MAXN];
int tree[MAXN];
int lowbit(int p)
{return p&(-p);} int read(int &n)
{
char ch=' ';int q=,w=;
for(;(ch!='-')&&((ch<'')||(ch>''));ch=getchar());
if(ch=='-')w=-,ch=getchar();
for(;ch>='' && ch<='';ch=getchar())q=q*+ch-;
n=q*w; return n;
} void interval_increase(int x,int v)
{
for(int i=x;i>;i=i-lowbit(i))
{
tree[i]+=v;
}
} int point_ask(int p)
{
int ans=a[p];
for(int i=p;i<=n;i=i+lowbit(i))
{
ans=ans+tree[i];
}
return ans;
}
int main()
{
ios::sync_with_stdio(false);
read(n);
read(m);
for(int i=;i<=n;i++)
read(a[i]);
for(int i=;i<=m;i++)
{
int how;
read(how);
if(how==)// 增加
{
int x,y,v;
read(x);
read(y);
read(v);
interval_increase(y,v);
interval_increase(x-,-v);
}
else
{
int p;
read(p);
printf("%d",point_ask(p));
putchar('\n');
}
}
return ;
}

飞速的读入优化

关于scanf与cin哪个快的问题的更多相关文章

  1. scanf和cin的差异

    scanf和cin的差异 引例:http://www.cnblogs.com/shenben/p/5516996.html 大家都知道,在C++中有两种输入.输出方式—scanf和cin,但是,它们之 ...

  2. cin 和scanf,scanf比cin快很多

    //#include <iostream> #include <stdio.h> //#include <fstream> //using namespace st ...

  3. scanf 和cin 的区别

    笔试的时候经常遇到突然string s;cin>>s; 有的时候编译会错误,不知道为什么. 今天在练习枚举类型的时候,也遇到这样一个问题. enum weekday{Monday,Tues ...

  4. 对于scanf和cin的输入输出速度的验证

    本文为https://www.byvoid.com/zhs/blog/fast-readfile的验证性文章 --------------------------------------------- ...

  5. mac 下 sublime text 运行c++/c 不能使用scanf/cin

    { "cmd": ["g++", "${file}", "-o", "${file_path}/${file_ ...

  6. scanf 与 cin 的区别

    在论坛上看到有人提出一个如下的问题,在此总结一下. 原问题: http://topic.csdn.net/u/20110414/22/90d0606c-9876-48e4-9b69-bd8bd8a41 ...

  7. 关于scanf 与 cin gets(),getline()......输入输出字符串的区别

    很对人对于字符串的输入输出一直是比较模糊的,今天总结一下几个常用的输入流符号对于输入字符串时的区别: 1.scanf(),首先 它遇到空格或回车键(\n)就会结束,并且会将回车符算入字符串中: 2.c ...

  8. scanf和cin性能的比较

    我的实验机器配置是: 处理器:Intel(R) Core(TM) i3-7100U CPU @ 2.40GHz 2.40GHz 随机访问存储器:4.00GB 操作系统:Windows10 集成开发环境 ...

  9. getchar(),scanf(),gets(),cin,输入字符串

    #include<iostream>#include<stdio.h>#include<string.h>#include<string>using n ...

随机推荐

  1. WPF 绘制曲线图

    之前一直用GDI绘图,后面公司要求使用WPF,网上WPF资料太少(可能自己没找到吧),自己写了个测试用,可以拖动. 前端代码 <Window x:Class="Wpf绘图.Window ...

  2. Interview Common Sample Codes

    1. Quick Sort: int partition(int A[], int p, int r) { int x = A[r]; // Pivot element int i = p - 1; ...

  3. zabbix docker - 安装和初始化配置

    zabbix docker - 安装和初始化配置 安装zabbix server docker-mysql版本 zabbix server支持不同的数据库(详见zabbix的docker hub),这 ...

  4. 【BZOJ3676】 [Apio2014]回文串(SAM,manacher)

    传送门 BZOJ 洛谷 Solution 考虑我们每找到一个回文串就更新一次答案,跑个SAM,这样子复杂度是爆炸的. 接下来的就是优化: 我们可以倍增跳直到跳不了,最后的siz就是出现次数. 没了?没 ...

  5. Android OOM 引发的思考

    一.为何会出现OOM 因为Android系统的硬件资源是相当有限的,而且分配给一个应用的资源更为有限,尤其是内存.当应用突然申请的内存大于允许的最大值的时候,就会出现OOM. 如果想要获取App的内存 ...

  6. WebRTC学习之 Intel® Collaboration Suite for WebRTC源码流程解读

    年后回来,因为新项目的需求,开始了解WebRTC相关的知识.目前接触的是Intel® Collaboration Suite for WebRTC.刚开始看SDK发现很多概念是我目前不知道的,于是恶补 ...

  7. 纯CSS下拉菜单(希望对有需要的小伙伴有所帮助)

    效果截图(颜色有点丑,请无视): <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  8. 使用pipenv隔离不同项目的依赖包

    pipenv可以为不同的路径创建python环境和依赖包,结合pyenv可以达到为不同项目使用不同python版本,不同依赖包的目的. pip install pipenv #安装pipenv 使用p ...

  9. NodeJS简单爬虫

    NodeJS简单爬虫 最近一直在追火星的一本书,然后每次都要去网站看,感觉很麻烦,于是,想起用爬虫爬取章节,务实派,说干就干! 爬取思路 1.该网站的页面呈现出一定的规律 2.使用NodeJS的req ...

  10. python 使用PyInstaller将程序打包

    PyInstaller可以用来打包python应用程序,打包完的程序就可以在没有安装Python解释器的机器上运行了.类似于C#窗体程序使用Setup Factory 9 Trial进行打包. 安装: ...