私は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では、now()関数を使用できます。
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変数の値を整数値に切り捨てることもできます。
diff_sec = chrono::duration_cast<chrono::nanoseconds>(diff);
cout << diff_sec.count() << endl;
詳細については、 こちら をクリックしてください
[〜#〜]概要[〜#〜]
@AshutoshMehra
responseを使用して、このための簡単なセマンティックハックを作成しました。この方法でコードは本当に読みやすくなります!
[〜#〜]マクロ[〜#〜]
#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
[〜#〜] usage [〜#〜]
speedtest__("Block Speed: ")
{
// The code goes here
}
[〜#〜] output [〜#〜]
Block Speed: 0.127000000s
注:問題はもともとコンパイル時間に関するものでしたが、後でOPが実際に実行時間を意味することが判明しました。しかし、おそらくこの答えは誰かに役立つでしょう。
Visual Studioの場合:Tools / Options / Projects and Solutions / VC++ Project Settings
と設定Build Timing
オプション 'yes
'。その後、すべてのビルドの時間が出力ウィンドウに表示されます。
これは、ダイストラのアルゴリズムのように見えます。いずれにせよ、実行にかかる時間はNに依存します。3秒以上かかる場合、実行するすべての計算を行う必要があるため、高速化する方法がわかりません。
解決しようとしている問題によっては、より高速なアルゴリズムが存在する場合があります。
上記の手法を使用しましたが、まだCode:Blocks IDEで指定された時間が得られた結果とほぼ同じであることがわかりました(わずかなマイクロ秒の差がある可能性があります)。 。