一开始入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. [算法专题] BST&AVL&RB-Tree

    BST 以下BST的定义来自于Wikipedia: Binary Search Tree, is a node-based binary tree data structure which has t ...

  2. 迁移桌面程序到MS Store(5)——.NET Standard

    接下来的几篇,我想讨论下迁移桌面程序到MS Store,可以采用的比较常见.通用性比较强的实施步骤和分层架构. 通常商业项目一般都是不断的迭代,不太可能突然停止更新现有的桌面版本,然后花很长时间从头来 ...

  3. [UWP] 用 AudioGraph 来增强 UWP 的音频处理能力——AudioFrameInputNode

    上一篇心得记录中提到了 AudioGraph, 描述了一下 什么是 AudioGraph 以及其中涉及到的各种类型的 节点(Node). 这一篇就其中比较有意思的 AudioFrameInputNod ...

  4. 笔记:BroadcastReceiver的运行过程

    广播概述 广播用来在组件之间传递消息,可以是同进程或跨进程. 广播机制是基于发布订阅的事件驱动模型,使用上比Binder通信(跨进程接口回调)更低耦合.简单. ActivityManagerServi ...

  5. spring boot 通过controller跳转到指定 html 页面问题以及请求静态资源问题

    1. 项目结构 2. pom文件配置 重点是红色框内的依赖 3. application配置文件 4. controller 注意使用@Controller注解: @RestController 等价 ...

  6. css 如何“画”一个抽奖转盘

    主要描述的是如何运用 css 绘制一个抽奖转盘,并运用原生 js 实现转盘抽奖效果. 先来张效果图: 布局 一般来说,转盘一般有四个部分组成:外层闪烁的灯.内层旋转的圆盘.圆盘上的中奖结果.指针. 所 ...

  7. ubuntu16.04 编译出错:fatal error: SDL/SDL.h: No such file or directory

    在ubuntu 16.04编译神经网络代码时候,遇到了这样一种错误? fatal error: SDL/SDL.h: No such file or directory 原因是SDL库没有安装,根据你 ...

  8. 【原创】InputStream has already been read - do not use InputStreamResource if a stream needs to be read multiple times

    一.背景 基于SpringBoot 构建了一个http文件下载服务,检查tomcat access 发现偶尔出现500 状态码的请求,检查抛出的异常堆栈 2019-03-20 10:03:14,273 ...

  9. Golang Struct 声明和使用

    Golang Struct 声明和使用 Go可以声明自定义的数据类型,组合一个或多个类型,可以包含内置类型和用户自定义的类型,可以像内置类型一样使用struct类型 Struct 声明 具体的语法 t ...

  10. [每天解决一问题系列 - 0005] WiX Burn 如何校验chained package的合法性

    问题描述: 项目中使用Wix burn打包,内部包含了多个MSI.有时候会遇到如下错误 Error 0x80091007: Failed to verify hash of payload: Setu ...