优化 C 代码 - >超出 CodeChef 解决方案时间



哪些提示和技巧,以便可以在给定的时间限制中执行我的代码?也许有一些逻辑上的更改或其他任何东西。

当我在CodeChef提交解决方案时,它显示了超过时间限制,但我认为它足够快的简单代码。它如何在时间限制内执行,即3秒?

代码

long int iv, aia[1000][1000];
long int imax = 0;
long int score(int ia, int ib);
int main() {
    int ii, ij;
    long int iut, ivt, ie;
    memset(aia, 0, 1000000);
    scanf("%d %d", &iv, &ie);
    if((iv <= 1000) && (iv >= 2)) {
        if((ie >= (iv-1)) && (ie <= ( (iv*(iv-1)) / 2) )) {
            for(ii = 0; ii<ie; ii++) {
                scanf("%d%d", &iut, &ivt);
                if((iut >= 0) && (ivt <= (iv -1))) {
                    scanf("%d", &aia[iut][ivt]);
                    if(aia[iut][ivt] < 0) {
                        return 1;
                    }
                    aia[ivt][iut] = aia[iut][ivt];
                }
                else {
                    return 1;
                }
            }
            for(ii = 0; ii<iv; ii++) {
                for(ij = 0; ij<iv; ij++) {
                   printf("%d ", score(ii, ij));
                   imax = 0;
                }
                printf("n");
            }
        }
    }
    return 0;
}

long int score(int ia, int ib) {
    int ii;
    int long imaxt = 0;
    if(ia == ib) {
        return 0;
    }
    if(aia[ia][ib] != 0) {
        imax = aia[ia][ib];
    }
    for(ii = 0; ii<iv; ii++) {
        if((ii != ib) && (ii != ia)) {
            if(aia[ia][ii] != 0) {
                if(aia[ii][ib] != 0) {
                    imaxt = (aia[ia][ii] < aia[ii][ib]) ? aia[ia][ii] : aia[ii][ib];
                    if(imaxt > imax) {
                        imax = imaxt;
                    }
                }
            }
        }
    }
    return imax;
}

我对您的建议是通过探查器运行代码。我个人更喜欢Valgrind。

然后,当您找到瓶颈时,您可能会戴上它或将其发布在这里而不是长列表。

最新更新