数学研发论坛

 找回密码
 欢迎注册
查看: 810|回复: 5

[讨论] 序列的翻转输出

[复制链接]
发表于 2017-5-25 21:17:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?欢迎注册

x
题目虽然很简单。但我最好的结果也只是 执行时间 0.124s,内存消耗 1320 KB。  求助。
而该题的提交排行榜上 有很多人的 执行时间是0.001s,很好奇是怎么做到的。

http://acm.timus.ru/problem.aspx?space=1&num=1001
附带我的代码,中规中矩,
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>

  4. int main(int argc, char *argv[])
  5. {
  6.     #define SIZE 128*1024
  7. //这个SIZE值是反复尝试出来的
  8.     double head[SIZE];
  9.     int cnt=0;
  10.     long long input;
  11.     while(scanf("%lld",&input)!=EOF){
  12.         head[cnt++] = sqrt(input);
  13.     }
  14.     while(cnt>0){
  15.         printf("%.4lf\n",head[--cnt]);
  16.     }
  17.     return 0;
  18. }
复制代码



毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2017-5-26 10:24:37 | 显示全部楼层
应该是网站的问题. 因为我又挑选了一道简单的题目. 发现 仍然是有一堆的 答案是0.001s,都是 intel C/C++ 的compiler


毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2017-5-26 10:37:57 | 显示全部楼层
1.
while(scanf("%lld",&input)!=EOF){
        head[cnt++] = sqrt(input);
    }
这样的io操作中间最好不要有其他的操作?是不是可以提高io效率?

2. 必须要用sqrt()吗?sqrtf()行不行?只要求小数点后4位的精度。

3. printf("%.4lf\n",head[--cnt]);效率是不是比较低?最多要打印14560次
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2017-5-26 13:10:17 | 显示全部楼层
alt 发表于 2017-5-26 10:37
1.
while(scanf("%lld",&input)!=EOF){
        head[cnt++] = sqrt(input);

1) 这样的IO是怎样的IO,可否详细说明 不利的地方
2) 因为题目说了输入是 long long 的范围. 如果用sqrtf, 将会发生 long long 截断转化成 float 型. 这个在 输入不是特别大的时候,能保证精度,  当输入比较大的时候,超出了最大 int 的范围, 可能会在小数点后面出现误差.
3) 这个还有改进的地方吗? 因为题目要求是要打印出来的
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
发表于 2017-5-26 16:53:24 | 显示全部楼层
printf 输出十进制字符,内部估计需要大量的除法运算,若能优化一下收益肯定很大。
它要求精确到小数点后四位,可否避免用浮点算法,改用定点算法,甚至是整型替代浮点算法?当然代码量就上去了。。。
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
 楼主| 发表于 2017-5-26 17:58:16 | 显示全部楼层
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 ,   所以应该不会到这个层次,
毋因群疑而阻独见  毋任己意而废人言
毋私小惠而伤大体  毋借公论以快私情
您需要登录后才可以回帖 登录 | 欢迎注册

本版积分规则

小黑屋|手机版|数学研发网 ( 苏ICP备07505100号 )

GMT+8, 2019-3-19 16:30 , Processed in 0.054180 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表