序列的翻转输出
题目虽然很简单。但我最好的结果也只是 执行时间 0.124s,内存消耗 1320 KB。求助。而该题的提交排行榜上 有很多人的 执行时间是0.001s,很好奇是怎么做到的。
http://acm.timus.ru/problem.aspx?space=1&num=1001
附带我的代码,中规中矩,#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main(int argc, char *argv[])
{
#define SIZE 128*1024
//这个SIZE值是反复尝试出来的
double head;
int cnt=0;
long long input;
while(scanf("%lld",&input)!=EOF){
head = sqrt(input);
}
while(cnt>0){
printf("%.4lf\n",head[--cnt]);
}
return 0;
}
应该是网站的问题. 因为我又挑选了一道简单的题目. 发现 仍然是有一堆的 答案是0.001s,都是 intel C/C++ 的compiler
1.
while(scanf("%lld",&input)!=EOF){
head = sqrt(input);
}
这样的io操作中间最好不要有其他的操作?是不是可以提高io效率?
2. 必须要用sqrt()吗?sqrtf()行不行?只要求小数点后4位的精度。
3. printf("%.4lf\n",head[--cnt]);效率是不是比较低?最多要打印14560次 alt 发表于 2017-5-26 10:37
1.
while(scanf("%lld",&input)!=EOF){
head = sqrt(input);
1) 这样的IO是怎样的IO,可否详细说明 不利的地方
2) 因为题目说了输入是 long long 的范围. 如果用sqrtf, 将会发生 long long 截断转化成 float 型. 这个在 输入不是特别大的时候,能保证精度,当输入比较大的时候,超出了最大 int 的范围, 可能会在小数点后面出现误差.
3) 这个还有改进的地方吗? 因为题目要求是要打印出来的 printf 输出十进制字符,内部估计需要大量的除法运算,若能优化一下收益肯定很大。
它要求精确到小数点后四位,可否避免用浮点算法,改用定点算法,甚至是整型替代浮点算法?当然代码量就上去了。。。 gxqcn 发表于 2017-5-26 16:53
printf 输出十进制字符,内部估计需要大量的除法运算,若能优化一下收益肯定很大。
它要求精确到小数点 ...
Solved problems: show | hide•Sort by: id | authors | difficulty Volume 2 →
ID Title Source Authors Difficulty
Ok 1000 A+B Problem 77032 17
Ok 1001 Reverse Root 22240 17
Ok 1068 Sum 27511 42
Ok 1025 Democracy in Danger Autumn School Contest 2000 17652 71
Ok 1083 Factorials!!! Spring School Contest 2001 14811 74
该题 在timus上 是 难度级别最低的,仅次于A+B Problem , 所以应该不会到这个层次, :*-^
页:
[1]