關於scanf與cin哪個快的問題

来源:http://www.cnblogs.com/zwfymqz/archive/2017/05/08/6827529.html
-Advertisement-
Play Games

一開始入c++的時候成天跑cin,cout 直到有一天用cin,cout超時 才知道scanf比cin快的多 但是後來又聽說加了ios::sync_with_stdio(false);的cin跟飛一樣 那麼到底哪個快呢? 咱們來做個小測試 題目選擇:https://www.luogu.org/pro ...


 

一開始入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吧。。

 

 

附代碼:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int MAXN=500001;
 6 int n,m;
 7 int a[MAXN];
 8 int tree[MAXN];
 9 int lowbit(int p)
10 {return p&(-p);}
11 
12 void interval_increase(int x,int v)
13 {
14     for(int i=x;i>0;i=i-lowbit(i))
15     {
16         tree[i]+=v;
17     }
18 }
19 
20 int point_ask(int p)
21 {
22     int ans=a[p];
23     for(int i=p;i<=n;i=i+lowbit(i))
24     {
25         ans=ans+tree[i];
26     }
27     return ans;
28 }
29 int main()
30 {
31     //ios::sync_with_stdio(false);
32     cin>>n>>m;
33     for(int i=1;i<=n;i++)
34         cin>>a[i];
35     for(int i=1;i<=m;i++)
36     {
37         int how;
38         cin>>how;
39         if(how==1)// 增加 
40         {
41             int x,y,v;
42             cin>>x>>y>>v;
43             interval_increase(y,v);
44             interval_increase(x-1,-v);
45         }
46         else
47         {
48             int p;
49             cin>>p;
50             cout<<point_ask(p)<<endl;
51         }
52     }
53     return 0;
54 }
龜速的cin
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int MAXN=500001;
 6 int n,m,p;
 7 int tree[MAXN];//
 8 int lowbit(int p)
 9 {
10     return p&(-p);
11 }
12 void point_increase(int w,int v)
13 {
14     for(int i=w;i<=n;i=i+lowbit(i))
15         tree[i]=tree[i]+v;
16     return ;
17 }
18 int interval_ask(int x)
19 {
20     int ans=0;
21     for(int i=x;i!=0;i=i-lowbit(i))
22     {
23         ans=ans+tree[i];
24     }
25     return ans;
26 }
27 int main()
28 {
29     scanf("%d%d",&n,&m);
30     for(int i=1;i<=n;i++)
31     {
32         scanf("%d",&p);
33         point_increase(i,p);
34     }
35     for(int i=1;i<=m;i++)
36     {
37         scanf("%d",&p);
38         if(p==1)//
39         {
40             int x,y;
41             scanf("%d%d",&x,&y);
42             point_increase(x,y);
43         }
44         else// 求和 
45         {
46             int x,y;
47             scanf("%d%d",&x,&y);
48             printf("%d\n",interval_ask(y)-interval_ask(x-1));
49         }
50     }
51     return 0;
52 }
nice的scanf
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int MAXN=500001;
 6 int n,m;
 7 int a[MAXN];
 8 int tree[MAXN];
 9 int lowbit(int p)
10 {return p&(-p);}
11 
12 void interval_increase(int x,int v)
13 {
14     for(int i=x;i>0;i=i-lowbit(i))
15     {
16         tree[i]+=v;
17     }
18 }
19 
20 int point_ask(int p)
21 {
22     int ans=a[p];
23     for(int i=p;i<=n;i=i+lowbit(i))
24     {
25         ans=ans+tree[i];
26     }
27     return ans;
28 }
29 int main()
30 {
31     ios::sync_with_stdio(false);
32     cin>>n>>m;
33     for(int i=1;i<=n;i++)
34         cin>>a[i];
35     for(int i=1;i<=m;i++)
36     {
37         int how;
38         cin>>how;
39         if(how==1)// 增加 
40         {
41             int x,y,v;
42             cin>>x>>y>>v;
43             interval_increase(y,v);
44             interval_increase(x-1,-v);
45         }
46         else
47         {
48             int p;
49             cin>>p;
50             cout<<point_ask(p)<<endl;
51         }
52     }
53     return 0;
54 }
還不錯的cin優化
 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 using namespace std;
 5 const int MAXN=500001;
 6 int n,m;
 7 int a[MAXN];
 8 int tree[MAXN];
 9 int lowbit(int p)
10 {return p&(-p);}
11 
12 int read(int &n)
13 {
14     char ch=' ';int q=0,w=1;
15     for(;(ch!='-')&&((ch<'0')||(ch>'9'));ch=getchar());
16     if(ch=='-')w=-1,ch=getchar();
17     for(;ch>='0' && ch<='9';ch=getchar())q=q*10+ch-48;
18     n=q*w;    return n;
19 }
20 
21 void interval_increase(int x,int v)
22 {
23     for(int i=x;i>0;i=i-lowbit(i))
24     {
25         tree[i]+=v;
26     }
27 }
28 
29 int point_ask(int p)
30 {
31     int ans=a[p];
32     for(int i=p;i<=n;i=i+lowbit(i))
33     {
34         ans=ans+tree[i];
35     }
36     return ans;
37 }
38 int main()
39 {
40     ios::sync_with_stdio(false);
41     read(n);
42     read(m);
43     for(int i=1;i<=n;i++)
44         read(a[i]);
45     for(int i=1;i<=m;i++)
46     {
47         int how;
48         read(how);
49         if(how==1)// 增加 
50         {
51             int x,y,v;
52             read(x);
53             read(y);
54             read(v);
55             interval_increase(y,v);
56             interval_increase(x-1,-v);
57         }
58         else
59         {
60             int p;
61             read(p);
62             printf("%d",point_ask(p));
63             putchar('\n');
64         }
65     }
66     return 0;
67 }
飛速的讀入優化

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • IntelliJ IDEA-2017.1.1 tomcat-8.5.13 問題:在IntelliJ IDEA中使用tomcat部署web app時,提示:Error during artifact deployment. See server log for details IntelliJ IDE ...
  • 多進程網路編程中處理fork後可能的僵死進程和可能被中斷的系統調用問題。 ...
  • Python實現 PHP實現 ...
  • 前段時間瞭解到Spring JPA,感覺挺好用,但其依賴於Hibernate,本人看到Hibernate就頭大(不是說Hibernate不好哈,而是進階太難),於是做了一個迷你版的Mybatis JPA. 一.簡介 1.1粗糙點 1.)Entity不支持實體類的嵌套; 2.)目前不支持批量操作,不支 ...
  • 今天學習第一模塊的最後一課課程--函數: python的第一個函數: 函數可返回各種數據類型: 同時返回多種類型時,將是返回一元組: 函數參數的調用: 1,位置調用:編寫時需要一一對應,如果少了,或是多少都會出錯! 2,關鍵字調用: 3,位置調用與關鍵字調用可以同時使用,但是需要註意的問題: 參數組 ...
  • 最近項目中有個定時任務的需求,定時檢查mysql數據與etcd數據的一致性,具體實現細節就不說了,今天要說的就是實現過程中遇到了druid拋出的異常,以及解決的過程 異常 異常詳細信息 五月 05, 2017 4:16:00 下午 com.alibaba.druid.proxy.DruidDrive ...
  • 正則表達式 正則表達式為高級的文本模式匹配、抽取、與/或文本形式的搜索和替換功能提供了基礎。簡單的說,正則表達式是一些由字元和特殊符號組成的字元串,他們描述了模式的重覆或者表述多個字元,於是正則表達式能按照某種模式匹配一系列有相似特征的字元串。換句話說,他們能夠匹配多個字元串,一種只能匹配一個字元串 ...
  • 題目描述 如題,已知一個數列,你需要進行下麵兩種操作: 1.將某一個數加上x 2.求出某區間每一個數的和 輸入輸出格式 輸入格式: 第一行包含兩個整數N、M,分別表示該數列數字的個數和操作的總個數。 第二行包含N個用空格分隔的整數,其中第i個數字表示數列第i項的初始值。 接下來M行每行包含3或4個整 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...