質問

C++ プログラムを作成しました。制限時間を超えないように実行にかかる時間を計算する方法を知りたいです。

#include<iostream>

using namespace std;

int main ()
{
    int st[10000],d[10000],p[10000],n,k,km,r,t,ym[10000];
    k=0;
    km=0;
    r=0;
    scanf("%d",&t);
    for(int y=0;y<t;y++)
    {
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
            cin>>st[i] >>d[i] >>p[i];
    }
    for(int i=0;i<n;i++)
    {
            for(int j=i+1;j<n;j++)
            {
                    if((d[i]+st[i])<=st[j])
                    {
                              k=p[i]+p[j];
                    }
                    if(k>km)
                    km=k;
            }
        if(km>r)
        r=km;
    }
    ym[y]=r;
}
    for( int i=0;i<t;i++)
    {
         cout<<ym[i]<<endl;
    }


    //system("pause");
    return 0;
}     

これは私のプログラムなので制限時間3秒以内に終わらせたいです!!どうやってするの ?はい、ごめんなさい、実行時間のことを言いました!!

役に立ちましたか?

解決

あなたはcygwinのインストールされている場合、それはあなたの実行可能ファイルを実行して、bashシェルだから、MyProgramユーティリティを使用して、timeを言うので、同様ます:

/usr/bin/time ./MyProgram

これはあなたのプログラムの実行がかかった時間を報告します - 出力は次のようになります:

real    0m0.792s
user    0m0.046s
sys     0m0.218s

は手動でもそうのような、それはclock()ライブラリ関数を使用して機器にCプログラムを修正することができます

#include <time.h>
int main(void) {
    clock_t tStart = clock();
    /* Do your stuff here */
    printf("Time taken: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
    return 0;
}

他のヒント

コードの一部の実行時間を計測するためのC ++ 11と、今()関数を使用することができ

auto start = chrono::steady_clock::now();

//  Insert the code that will be timed

auto end = chrono::steady_clock::now();

// Store the time difference between start and end
auto diff = end - start;

あなたは上記のコードでは、開始と終了の間の時間差を印刷したい場合は、あなたが使用することができます:

cout << chrono::duration <double, milli> (diff).count() << " ms" << endl;

あなたはナノ秒を使用する場合は、あなたが使用します。

cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;

差分変数の値はまた、必要に応じ、例えば、結果が発現、整数値に切り捨てられることができるよう

diff_sec = chrono::duration_cast<chrono::nanoseconds>(diff);
cout << diff_sec.count() << endl;

詳細情報についてはこちら をクリックしてくださいP>

概要

私はこれを使用して簡単なセマンティックハックを書きました @AshutoshMehra応答。このようにすると、コードが本当に読みやすくなります。

大きい

#include <time.h>

#ifndef SYSOUT_F
#define SYSOUT_F(f, ...)      _RPT1( 0, f, __VA_ARGS__ ) // For Visual studio
#endif

#ifndef speedtest__             
#define speedtest__(data)   for (long blockTime = NULL; (blockTime == NULL ? (blockTime = clock()) != NULL : false); SYSOUT_F(data "%.9fs", (double) (clock() - blockTime) / CLOCKS_PER_SEC))
#endif

使用法

speedtest__("Block Speed: ")
{
    // The code goes here
}

出力

Block Speed: 0.127000000s

注:問題は、コンパイル時間について元々だったが、後にはOPが本当に実行時間を意味していることが判明しました。しかし、おそらく、この答えはまだ誰かのために有用であろう。

Visual Studio用:Tools / Options / Projects and Solutions / VC++ Project Settingsと 'Build Timing' にyesオプションを設定して行きます。その後、すべてのビルドの時間は、出力ウィンドウに表示されます。

このはDijstraのアルゴリズムのように見えます。それは私がそれを行うことの必要性をやっているすべての計算として、それをスピードアップの見ることができますどのような方法がない3秒以上を要する場合はいずれの場合も、実行にかかる時間はN.に依存します。

あなたが解決しようとしている何の問題に応じて、より高速なアルゴリズムがあるかもしれません。

私は技術は、上記の前記使用している、まだ私は発見したのコードで指定された時間:ブロックIDE のobtained-結果に多少類似していた(それは少しマイクロによって異なるであろうとすることができます秒)..

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top