为什么G++编译出来的程序会比C++编译出来的慢那么多?[问]
如题……
似乎效率相差近两倍!(G++慢很多)难道是版本问题?
这是我在PKU OJ提交的一道题的结果。
优化前:
2644831 flouse 1064 Accepted 220K 386MS C++ 1335B 2007-09-10 19:11:29
2644828 flouse 1064 Time Limit Exceeded G++ 1335B 2007-09-10 19:10:27
估化后:
2644849 flouse 1064 Accepted 228K 105MS C++ 1342B 2007-09-10 19:15:07
2644840 flouse 1064 Accepted 372K 169MS G++ 1342B 2007-09-10 19:13:01
My Source:
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
//#include <fstream>
//ifstream in("cable.in");
//#define cin in
int n, k;
int l[10000], maxK;
__int64 tl, maxL, start, end;
int count(int m){
if (m == 0) m = 1;
int num = 0;
for (int i = 0; i < n; i++){
num += l[i] / m;
}
return num;
}
//多CASE版
//int main(){
// float tmp;
// while (cin >> n >> k){
// if (n == 0 && k == 0) break;
// tl = 0;
// maxL = 0;
// for (int i = 0; i < n; i++){
// cin >> tmp;
// l[i] = tmp*100;
// if (maxL < l[i]) maxL = l[i];
// tl += l[i];
// }
// start = 0;
// end = maxL / floorf(k*1.0/n+0.999999);
// while(end >= start){
// maxL = (start + end) / 2;
// maxK = count(maxL);
// if (maxK < k) end = maxL-1;
// else start = maxL+1;
// }
// if (maxK < k && maxL != 0) maxL--;
// tmp = maxL / 100.0;
// cout << setiosflags(ios::fixed) << setprecision(2) << tmp << endl;
// }
// return 0;
//}
int main(){
float tmp;
cin >> n >> k;
tl = 0;
maxL = 0;
for (int i = 0; i < n; i++){
scanf("%f", &tmp);
l[i] = tmp*100;
if (maxL < l[i]) maxL = l[i];
tl += l[i];
}
start = 0;
end = maxL;
while(end >= start){
maxL = (start + end) / 2;
maxK = count(maxL);
if (maxK < k) end = maxL-1;
else start = maxL+1;
}
if (maxK < k && maxL != 0) maxL--;
tmp = maxL / 100.0;
cout << setiosflags(ios::fixed) << setprecision(2) << tmp << endl;
return 0;
}