문제
저는 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 Shell에서 실행 파일을 실행하십시오. MyProgram
, 사용 time
유틸리티와 같은 유틸리티 :
/usr/bin/time ./MyProgram
이렇게하면 프로그램 실행 시간이 얼마나 오래 걸렸는지보고됩니다. 출력은 다음과 비슷합니다.
real 0m0.792s
user 0m0.046s
sys 0m0.218s
C 프로그램을 수동으로 수정하여 clock()
라이브러리 기능 : 그렇게 :
#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
응답. 당신은 코드가 이런 식으로 읽을 수 있습니다!
매크로
#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가 실제로 실행 시간을 의미한다는 것이 밝혀졌습니다.하지만 어쩌면 이 답변이 누군가에게는 여전히 유용할 수도 있습니다.
비주얼 스튜디오의 경우:이동 Tools / Options / Projects and Solutions / VC++ Project Settings
그리고 설정 Build Timing
'에 대한 옵션yes
'.그 후 모든 빌드 시간이 출력 창에 표시됩니다.
이것은 Dijstra의 알고리즘처럼 보입니다. 어쨌든 실행 시간은 N에 따라 다릅니다. 3 초 이상이 걸리면 속도를 높일 수있는 방법이 없다면 수행중인 모든 계산을 수행해야하므로 수행 할 수있는 방법이 없습니다.
해결하려는 문제에 따라 더 빠른 알고리즘이있을 수 있습니다.
나는 위에서 언급 한 기술을 사용했지만 여전히 시간이 주어진 시간을 발견했습니다. 코드 : IDE를 차단합니다 얻은 결과와 다소 유사했습니다.