[アルゴリズム/規格]15552号::快速A+B(C++)


に質問🏻 :: [15522号]快速A+B


(緑色のテキストをクリックして問題に移動)

タイムアウトせずにテストエンクロージャの数を満たすために、A+Bをすばやく出力

アルゴリズム💻


既存のA+B問題では、パフォーマンスの問題がより重視されています.
質問に出したヒントを無視して、試してみました.

💡初めての試み💡


前の質問と同じ形で答えればいいです.
試験例tを入力します.
tを繰り返し、aとbを入力し、その和を出力するfor文を書きます.
#include <iostream>
using namespace std;

int main()
{
	int t, i, a, b;
	cin >> t;

	for (i = 0; i < t; i++) {
		cin >> a >> b;
		cout << a + b << "\n";
	}
	
	return 0;
}
このように記入して、結果は以下の通りです.

🚨タイムアウトを防ぐため?🚨


(ここでcin.tie(NULL)とsync with stdio(false)を用いた理由など詳細な説明はStranger’s LABの予告編でよく説明され、この投稿を要約した.)
百駿のサイトには以下のように表示されています.cin.tie(NULL)およびsync_with_stdio(false)の両方が適用され、endlの代わりに\nが使用される.
C言語、C++はscanf()printf()を使用します.この場合、I/O自体は非常に速く、通過しやすい.ただしC++の標準I/O cin、coutを使用するとタイムアウトします.C++だけでなくJAVA、Pythonもそうです.△Pythonのスピードはもともと遅い.
この問題を解決する第一の方法はC標準I/O stdioである.hを書く.
stdio.hで解くと、簡単に解決できます.
iostreamで解読してみます.
iostreamでcin,coutを書くと💡初めての試み💡タイムアウトが発生します.
stdio.hと違って、どうして遅いの?!
🔒1.理由🔒
  • C++は、Cの標準ストリームと同期する.つまり、同じバッファを共有!
  • 同期=>パフォーマンス/合理性、セキュリティ
    ex1. std::cin=同期=>stdin
    ex2. std::out=同期=>stdout 🔑2.解決🔑 : "동기화를 끊어주면 된다!"

  • アルゴリズム問題を解く2つの同期を切ってもOK

  • 同期解除後、=>C++標準ストリームはIOバッファから独立

  • そのためには、ios_basesync_with_stdio()を使用してください!(パラメータがfalseの場合は非同期)

  • ただし、同期は無効になっているため、CとC++スタイルのいずれかを選択して書き込む必要があります.
  • cin.tie(NULL);
  • 主関数第1行宣言
  • cinとcoutビームを解放する構文
  • cinを使用してデータを読み出す場合、出力バッファの内容を空にすることなく、
  • を先に入力する.ios_base::sync_with_stdio(false);
  • CおよびC++バッファ分離ロール
  • 💡2回目の試行:同期解除による作成💡

    #include <iostream>
    using namespace std;
    
    int main()
    {
    	cin.tie(NULL);
    	ios_base::sync_with_stdio(false);
    
    	int t, i, a, b;
    	cin >> t;
    
    	for (i = 0; i < t; i++) {
    		cin >> a >> b;
    		cout << a + b << "\n";
    	}
    
    	return 0;
    }
    これで成功!

    振り返る🤔

    cin.tie(NULL);ios_base::sync_with_stdio(false);を知らないため,この概念を理解するために複数の参照サイトが用いられている.だから私は理解するのに長い時間を費やしました.2つの最も分かりやすいサイトを以下の参考に添付します.
    私は知らない概念を理解し続けたい.ためらうよりも、埋め続けたほうがいい.

    Reference

  • https://st-lab.tistory.com/232
  • https://travelerfootprint.tistory.com/121