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

P2774 方格取数问题

```cpp #include<cstdio> #include <sys/time.h> #include<ctime> const int MAXN = 1e5 + 5; int A[MAXN]; int N = 3e4; struct timeval timeStart, timeEnd, timeSystemStart; #define min(x,y) (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 (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); } #undef min #include <bits/stdc++.h> void solve2() { 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); } inline int min(int x, int y) { return x < y ? x : y; } void solve3() { 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(); solve3(); return 0; } ``` ``` runTime is 1551777579.900354 runTime is 1551777590.225945 runTime is 1551777601.219573 ---------------------------------------- runTime is 1551777594.028162 runTime is 1551777609.060022 runTime is 1551777620.758691 ``` 事实证明,`#define`最快
by 隔壁的张栩嘉 @ 2019-03-05 17:21:43


@[Skqliao](/space/show?uid=38018) ``` #include<cstdio> #include <sys/time.h> #include<ctime> const int MAXN = 1e5 + 5; int A[MAXN]; int N = 3e4; struct timeval timeStart, timeEnd, timeSystemStart; #define min(x,y) (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 (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); } #undef min #include <bits/stdc++.h> void solve2() { 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); } inline int min(int x, int y) { return x < y ? x : y; } void solve3() { 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(); solve3(); return 0; } ``` ``` runTime is 1551777579.900354 runTime is 1551777590.225945 runTime is 1551777601.219573 ---------------------------------------- runTime is 1551777594.028162 runTime is 1551777609.060022 runTime is 1551777620.758691 ``` 大家别吵了,事实证明,#define最快
by 隔壁的张栩嘉 @ 2019-03-05 17:24:08


@[Skqliao](/space/show?uid=38018) 我在本地跑,哪来的O2?不好意思,因为强迫症,我也早就存过测常数的模板 ![](https://pic.dark.moe/images/2019/03/05/2876284a7a5e1b5c987c40e32953ef9e.png) ![](https://pic.dark.moe/images/2019/03/05/dbaa9d84aaaf9a5dfb10306b2671adf0.png)
by ArachnidaQueen @ 2019-03-05 17:25:51


@[隔壁的张栩嘉](/space/show?uid=125911) 不一定哦·^v·^第一组是三目运算符,第二组是if()else2333 ![](https://pic.dark.moe/images/2019/03/05/60644e5ba97a3179cd3e88f0f0597573.png)
by ArachnidaQueen @ 2019-03-05 17:30:07


@[ArachnidaQueen](/space/show?uid=157671) 说不定直接三目运算符会比`#define`快
by 隔壁的张栩嘉 @ 2019-03-05 17:35:23


@[ArachnidaQueen](/space/show?uid=157671) 求求你了,用clock()这么不准而且精度极低的函数计算运行时间,自己玩玩测个大概几秒也就罢了,就别好意思提自己在测常数了。
by SeKong @ 2019-03-05 19:33:14


@[隔壁的张栩嘉](/space/show?uid=125911) 快多少,一亿分之一?这叫快吗,随意扰动一下就不止1‰的浮动。
by SeKong @ 2019-03-05 19:36:19


@[Skqliao](/space/show?uid=38018) 既然这样那你觉得怎么样最快?
by 隔壁的张栩嘉 @ 2019-03-06 12:39:04


上一页 |