C/C++アルゴリズムコンペティションコードフレームワーク


C/C++アルゴリズムコンペティションコードフレームワーク
文書ディレクトリ
  • C/C++アルゴリズムコンペティションコードフレームワーク
  • 一、基本コードフレームワーク
  • 1.最短フレーム
  • 2.ユニバーサルフレーム
  • 二、テストコードフレームワーク
  • 1.時間テストフレームワーク
  • 2.ファイルリダイレクトフレーム
  • 三、究極のフレーム
  • 1.究極のフレームワークコード:
  • 2.究極のフレームワークの説明:
  • 付録

  • 一、基本コードフレームワーク
    1.最も簡単なフレームワーク
    最初にC/C++に触れたときは,ファイルや関数などの知識がなく,このフレームワークの下で文を書くだけで端末で基本入出力ができることが分かった.
  • (1)C言語
    #include 
    int main()
    {
           
        /*code*/
        return 0;
    }
    
  • (2)C++
    #include 
    using namespace std;
    int main()
    {
           
        /*code*/
        return 0;
    }
    

  • 2.万能フレーム
    学習が進むにつれて、基本的な入出力は問題を解く需要を満たすことができず、プログラムの作成を容易にするために、事前に常用ヘッダファイルを含めることができます.
  • C言語(共通ヘッダファイルを含む)
    #include 
    #include 
    #include 
    #include 
    int main()
    {
           
        /*code*/
        return 0;
    }
    
  • C+(万能ヘッダファイルを含む)
    #include 
    using namespace std;
    int main()
    {
           
        /*code*/
        return 0;
    }
    
  • 二、テストコードフレームワーク
    1.時間テストフレームワーク
    大規模なデータ入力に直面した場合、プログラム実行時間とアルゴリズム効率の比較を大まかに判断する必要がある場合、ヘッダファイルを使用して、出力された最後の行にプログラムを印刷する時間を使用することができる.clock()関数は、プログラムの実行時間を取得し、CLOCKS_PER_SECはシステムに関連し、両者を除いてプログラムの実行秒数である.データを入力するとプログラムの実行時間がかかるため、ファイルのリダイレクト方法(以下を参照)とパイプのテクニックを使用できます.
    パイプテクニック:コマンドラインを使用してプログラムecho | を実行する
  • C言語
    #include 
    #include 
    int main()
    {
           
    
        /*code*/
        
        printf("
    Time used = %f"
    , (double)clock() / CLOCKS_PER_SEC); return 0; }
  • C++
    #include 
    using namespace std;
    int main()
    {
           
    
        /*code*/
        
        printf("
    Time used = %f"
    , (double)clock() / CLOCKS_PER_SEC); return 0; }

  • 2.ファイルリダイレクトフレーム
    大規模なデータの入出力については、標準入出力をプログラムの同じディレクトリの入力data.in出力data.outファイルにリダイレクトすることができる.リダイレクト文:freopen( "data.in", "r", stdin);およびfreopen( "data.out", "r", stdout);を使用します.コードを提出する时、必ずこの2行の文を注釈することを覚えています!!!
  • C言語
    #include 
    int main()
    {
           
        freopen("data.in", "r", stdin);		//             
        freopen("data.out", "r", stdout);	//             
        
        /*code*/
        
        return 0;
    }
    
  • C++
    #include 
    using namespace std;
    int main()
    {
           
        freopen("data.in", "r", stdin);   //             
        freopen("data.out", "r", stdout); //             
    
        /*code*/
        
        return 0;
    }
    

  • 三、究極のフレームワーク
    1.究極のフレームワークコード:
    C++はC言語プログラムと互換性があり、より多くの関数テンプレート、クラステンプレート、アルゴリズムを持っているため、究極のフレームワークはC++言語を採用している.
    #define LOCAL            //       
    #include  //     
    /*          */
    #define INF 10000
    const int MAX = 1000000000;
    /*        */
    int Array[INF];
    
    using namespace std;
    int main()
    {
         
    #ifdef LOCAL
        freopen("data.in", "r", stdin);   //             
        freopen("data.out", "r", stdout); //             
    #endif
    
        /*code*/
    
    #ifdef LOCAL
        printf("
    Time used = %f"
    , (double)clock() / CLOCKS_PER_SEC); #endif return 0; }

    2.究極のフレームワークの説明:
  • 1.ローカル条件コンパイルマクロ定義のテスト
    #define LOCAL 
    
    マクロがローカルテストに使用される条件コンパイルを定義し、コードをコミットするときにこの行を注釈するだけです.
  • 2.ユニバーサルヘッダファイル
    #include  //     
    
    C++の万能ヘッダファイルで、このヘッダファイルにはほとんどのヘッダファイルが含まれており、具体的なヘッダファイルの内容定義は本稿末の付録部分を参照してください.ほとんどのコンテストとojプラットフォームは万能ヘッダファイルをサポートしていますが、工事での使用はお勧めしません.
  • 3.定数およびマクロ定義
    /*          */
    #define INF 10000
    const int MAX = 1000000000;
    
    マクロ定義とconst定数定義はいずれも定数を定義するために使用することができ、定数の値を変更しやすく、コードの可読性を高めることができ、記憶空間が十分な条件下でconst定数定義を推奨し、タイプチェックを行うことができる.
  • 4.大規模配列定義
    int Array[INF];
    
    大規模配列をmain関数の外に定義し、グローバル変数として定義する.1つは、手動で初期化する必要がなく、グローバル変数配列定義後に自動的に初期化することができる.二つ目は、グローバル変数がデータ領域に格納され、スタック領域のオーバーヘッドを低減することである.
  • 5.条件コンパイルファイルリダイレクト文およびランタイムテスト文
    #ifdef LOCAL
        freopen("data.in", "r", stdin);   //             
        freopen("data.out", "r", stdout); //             
    #endif
    
    #ifdef LOCAL
        printf("
    Time used = %f"
    , (double)clock() / CLOCKS_PER_SEC); #endif
    リダイレクト文と実行時間テスト文を条件コンパイルに設定し、ローカルコンパイル実行時に入出力をリダイレクトして実行時間を表示し、コードをコミットする場合は、最初の行のLOCALマクロ定義注釈を削除するだけでよい.

  • ふろく
  • 万能ヘッダファイルの定義
    #ifndef _GLIBCXX_NO_ASSERT
    #include 
    #endif
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #if __cplusplus >= 201103L
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #endif
    
    // C++
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    #if __cplusplus >= 201103L
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #endif