zoukankan      html  css  js  c++  java
  • 关于std::ios::sync_with_stdio(false)

      std::ios::sync_with_stdio(false);

      很多C++的初学者可能会被这个问题困扰,经常出现程序无故超时,最终发现问题处在cin和cout上,(甚至有些老oier也会被这个问题困扰,每次只能打scanf和printf,然后一堆的占位符巨麻烦),这是因为C++中,cin和cout要与stdio同步,中间会有一个缓冲,所以导致cin,cout语句输入输出缓慢,这时就可以用这个语句,取消cin,cout与stdio的同步,说白了就是提速,效率基本与scanf和printf一致。然后就可放心的使用cin,cout了。(不过实际上使用了using namespace std;之后就可以直接打ios::sync_with_stdio(false);了)

      update-20th/July/2018

      今天遇到有人问问题说关闭流同步以后会炸空间,我也很诧异。然后看了下代码,问题出在scanf()。取消流同步以后,stdio中带有的scanf()和printf()输入输出的内部同步也会被取消(大概是这样的,如果有误请联系博主更正),这时候再用scanf()和printf()就可能会出玄学错误,所以用的时候也要注意。

      另外,如果使用文件输入输出的话,一定记住要把这条语句放在freopen()后面,反正也会出西西,但是具体问题博主也不太清楚。。。

      哎,如果实在遇到卡输入输出的题,干脆上读优输优算了(摊手~)(233333),总之根据题意选择方法吧。

      例题

      下面放一个例题,排队接水

    #include<bits/stdc++.h>
    #define N 1010
    using namespace std;
    int n;long long sum;long double ans;
    struct Num{int val,id;}a[N];
    bool cmp(Num x,Num y)
    {return x.val<y.val;}
    void ready()
    {
      cin>>n;
      for(int i=1;i<=n;i++){
        cin>>a[i].val;a[i].id=i;}
      sort(a+1,a+n+1,cmp);
    }
    void work()
    {
      for(int i=1;i<=n;i++){
        cout<<a[i].id<<" ";
        sum+=(long long)(a[i].val*(n-i));}
      cout<<endl;
      ans=(long double)(sum)/double(n);
      printf("%.2Lf",ans);
    }
    int main()
    {
      std::ios::sync_with_stdio(false);
      ready();work();return 0;
    }
    蒟蒻写博客不易,如果有误还请大佬们提出
    如需转载,请署名作者并附上原文链接,蒟蒻非常感激
    名称:HolseLee
    博客地址:www.cnblogs.com/cytus
    个人邮箱:1073133650@qq.com
  • 相关阅读:
    Largest Rectangle in Histogram
    Valid Sudoku
    Set Matrix Zeroes
    Unique Paths
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Path Sum II
    Path Sum
    Validate Binary Search Tree
    新手程序员 e
  • 原文地址:https://www.cnblogs.com/cytus/p/7763569.html
Copyright © 2011-2022 走看看