一开始入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. String、StringBuffer、StringBuild的区别

    他们之间的区别主要在两个重大方面 一.处理速度上 StringBuild > StringBuffer > String 原因: String : 它定义为字符串的常量,定以后不能修改 S ...

  2. html canvas 的宽高以及像素限制

    canvas 宽高设置不合适的话,是画不出东西出来的 https://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-elem ...

  3. Shell-15--sed

  4. Java 10 实战第 1 篇:局部变量类型推断

    现在 Java 9 被遗弃了直接升级到了 Java 10,之前也发过 Java 10 新特性的文章,现在是开始实战 Java 10 的时候了. 今天要实战的是 Java 10 中最重要的特性:局部变量 ...

  5. Spring 声明事务中transactionAttributes属性 + - Exception 实现逻辑

    下面是一段典型的Spring 声明事务的配置: <bean id=“baseTxProxy” lazy-init=“true”class=“org.springframework.transac ...

  6. 脚手架vue-cli系列一:安装与规范

    我很喜欢Vue的一个重要原因就是因为它的vue-cli,这个工具可以让一个简单的命令行工具来帮助我快速地构建一个足以支撑实际项目开发的Vue环境,并不像Angular和React那样要在Yoman上找 ...

  7. shell编程中的if语句

    if语句在任何编程中都是必不可少.至关重要的分支语句,shell也是如此,只不过各种编程中的方式和格式有点不太一样 shell编程中的if语句基本格式如下: if [ X$1 = XA ];then ...

  8. 课程四(Convolutional Neural Networks),第二 周(Deep convolutional models: case studies) —— 0.Learning Goals

    Learning Goals Understand multiple foundational papers of convolutional neural networks Analyze the ...

  9. UML类图中的六种关系(物理设计阶段)

    UML类图中经常会用到各种箭头和线条来表示不同类或者接口之间的关系,因此非常好的理解各个图标的含义是很有必要的. 在物理设计阶段可以通过EA工具将类图搭建好,然后直接生成物理类,这样也可以减少物理设计 ...

  10. Hadoop2源码分析-HDFS核心模块分析

    1.概述 这篇博客接着<Hadoop2源码分析-RPC机制初识>来讲述,前面我们对MapReduce.序列化.RPC进行了分析和探索,对Hadoop V2的这些模块都有了大致的了解,通过对 ...