[アルゴリズム/規格]15552号::快速A+B(C++)
6630 ワード
に質問🏻 :: [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.理由🔒
ex1. std::cin=同期=>stdin
ex2. std::out=同期=>stdout 🔑2.解決🔑 :
"동기화를 끊어주면 된다!"
アルゴリズム問題を解く2つの同期を切ってもOK
同期解除後、=>C++標準ストリームはIOバッファから独立
そのためには、
ios_base
のsync_with_stdio()
を使用してください!(パラメータがfalse
の場合は非同期)ただし、同期は無効になっているため、CとC++スタイルのいずれかを選択して書き込む必要があります.
cin.tie(NULL);
ios_base::sync_with_stdio(false);
💡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
Reference
この問題について([アルゴリズム/規格]15552号::快速A+B(C++)), 我々は、より多くの情報をここで見つけました https://velog.io/@miiingirok/알고리즘백준-15552번-빠른-AB-Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol