以后手写min,max函数一定要反复检查

P2774 方格取数问题

还是std::min好哇
by 星小雨 @ 2019-03-05 15:03:20


邪教!自带maxmin慢出翔,手写if()大法好
by ArachnidaQueen @ 2019-03-05 15:05:50


自带maxmin开氧也不慢啊qaqaq
by Juan_feng @ 2019-03-05 15:07:36


@[ArachnidaQueen](/space/show?uid=157671) 我就想知道库函数也是if实现的,怎么就比你的if慢了?
by SeKong @ 2019-03-05 15:08:04


@[Skqliao](/space/show?uid=38018) inline
by ⚡GG⚡ @ 2019-03-05 15:11:47


@[垃圾一个](/space/show?uid=85933) 看过源代码再说吧,库函数一样inline了。
by SeKong @ 2019-03-05 15:16:59


@[Skqliao](/space/show?uid=38018) 说得好像我不想知道似的……自己测过,每1e9次,max/min是if(a>/<b)的2.0-2.2倍:)
by ArachnidaQueen @ 2019-03-05 15:17:46


c++用bits,pascal用math啊
by shuiyuhan @ 2019-03-05 15:22:42


主要是min/max应该还封装了别的。。所以比较慢
by 星小雨 @ 2019-03-05 15:27:12


@[ArachnidaQueen](/space/show?uid=157671) ``` #include <bits/stdc++.h> #include <sys/time.h> const int MAXN = 1e5 + 5; int A[MAXN]; int N = 3e4; struct timeval timeStart, timeEnd, timeSystemStart; inline int min(int x, int y) { return x < y ? x : y; } void solve1() { gettimeofday(&timeSystemStart, NULL); int res = 0; for (int i = 1; i <= N; ++i) { for (int j = 1; j <= N; ++j) { if (std::min(A[i], A[j]) == A[i]) ++res; } } gettimeofday(&timeEnd, NULL); double runTime = (timeEnd.tv_sec - timeStart.tv_sec) + (double)(timeEnd.tv_usec - timeStart.tv_usec) / 1000000; printf("runTime is %lf\n", runTime); } void solve2() { gettimeofday(&timeSystemStart, NULL); int res = 0; for (int i = 1; i <= N; ++i) { for (int j = 1; j <= N; ++j) { if (min(A[i], A[j]) == A[i]) ++res; } } gettimeofday(&timeEnd, NULL); double runTime = (timeEnd.tv_sec - timeStart.tv_sec) + (double)(timeEnd.tv_usec - timeStart.tv_usec) / 1000000; printf("runTime is %lf\n", runTime); } int main() { srand((unsigned long long)(new char)); for (int i = 1; i <= N; ++i) { A[i] = rand(); } solve1(); solve2(); return 0; } ``` ``` runTime is 1551770656.728527 runTime is 1551770665.015233 runTime is 1551770679.403779 runTime is 1551770687.715325 runTime is 1551770697.452731 runTime is 1551770705.809634 runTime is 1551770715.237783 runTime is 1551770723.584966 runTime is 1551770742.322617 runTime is 1551770750.776139 ``` 没开O2,请问你2倍的时间从何而来?能从原理上解释一下同样是一个if判断,为什么你的就能比他快一倍?
by SeKong @ 2019-03-05 15:31:14


| 下一页