문제

저는 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를 차단합니다 얻은 결과와 다소 유사했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top