此题可以找到规律f(n) = 1! * 2! *...*n!, 如果直接打表的话,由于n比较大(10000000),所以会超内存,这时候就要用到离线处理数据,就是先把数据存起来,到最后在暴力一遍求解就行了,代码如下

代码一(超内存):

  1. #include <stdio.h>
  2.  
  3. const long long mod = ;
  4. const int N = ;
  5. long long a[N];
  6.  
  7. int main()
  8. {
  9. a[] = a[] = ;
  10. for (int i = ; i < N; i++)
  11. {
  12. a[i] = a[i - ] * i % mod;
  13. }
  14.  
  15. for (int i = ; i < N; i++)
  16. {
  17. a[i] = a[i - ] * a[i] % mod;
  18. }
  19. int n;
  20. while (~scanf("%d", &n))
  21. {
  22. printf("%I64d\n", a[n]);
  23. }
  24. return ;
  25. }

代码二(AC)

  1. #include <stdio.h>
  2. #include <vector>
  3. #include <map>
  4. const long long mod = ;
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9. int n;
  10. vector<int> a;
  11. map<int, long long> vis;
  12. while (scanf("%d", &n) != EOF)
  13. {
  14. a.push_back(n);
  15. vis[n] = -;
  16. }
  17. long long prep = , nowp, prea = , nowa;
  18. for (int i = ; i <= ; i++)//离线算法
  19. {
  20. nowp = prep * i % mod;//相当于求阶乘
  21. prep = nowp;
  22. nowa = nowp * prea % mod;//求n个阶乘的乘积
  23. prea = nowa;
  24. if (vis.count(i))
  25. {
  26. vis[i] = nowa;
  27. }
  28. }
  29. for (int i = ; i < a.size(); i++)//暴力一遍
  30. {
  31.  
  32. printf("%I64d\n", vis[a[i]]);
  33. }
  34. return ;
  35. }

离线算法确实挺神奇的,要深刻理解才能做题

HDU 5139数据离线处理的更多相关文章

  1. hdu 5139 数据的离线处理

    所谓的数据离线处理,就是将所有的输入数据全部读入后,在进行统一的操作,这样当然有好处,比如让你算好多数的阶层,但是输入的每个数是没有顺序的,其实跟可以线性的解决,但是由于没有顺序的输入,这样处理的话复 ...

  2. HDU 5139 Formula --离线处理

    题意就不说了,求公式. 解法: 稍加推导能够得出 : f(n) = n! * f(n-1) , 即其实是求: ∏(n!)  ,盲目地存下来是不行的,这时候看见条件: 数据组数 <= 100000 ...

  3. HDU5200 数据离线处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5200 ,数据离线处理. 这是BestCoder Round #36的C题,比赛时自己用线段树做,姿势不 ...

  4. ODAC(V9.5.15) 学习笔记(十五)数据离线模式

    数据离线模式(Disconnected Mode)是指数据库只有在需要的时候才连接,数据的处理放在客户端内存缓冲区中完成.这样做最大的好处是减少了网络资源依赖,对数据库服务器的资源开销和压力也减少.如 ...

  5. IOS开发笔记(4)数据离线缓存与读取

    IOS开发笔记(4)数据离线缓存与读取 分类: IOS学习2012-12-06 16:30 7082人阅读 评论(0) 收藏 举报 iosiOSIOS 方法一:一般将服务器第一次返回的数据保存在沙盒里 ...

  6. hdu 5139(离线处理+离散化下标)

    Formula Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Sub ...

  7. hdu 5139 Formula

    http://acm.hdu.edu.cn/showproblem.php?pid=5139 思路:这道题要先找规律,f(n)=n!*(n-1)!*(n-2)!.....1!;  不能直接打表,而是离 ...

  8. hdu 5441 Travel 离线带权并查集

    Travel Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5441 De ...

  9. hdu 4940 数据太水...

    http://acm.hdu.edu.cn/showproblem.php?pid=4940 给出一个有向强连通图,每条边有两个值分别是破坏该边的代价和把该边建成无向边的代价(建立无向边的前提是删除该 ...

随机推荐

  1. 对于方法 String.Contains,只支持可在客户端上求值的参数。

    var ProjectLevel_XJJS = "06,07,08,09"; p.Where(e =>ProjectLevel_XJJS.Contains(e.LevelCo ...

  2. Html5 Canvas学习

    canvas: 首先在html页面中加入canvas标签 <canvas id="canvas" width="1024" height="74 ...

  3. JS中break continue和return的用法?

    在 break,continue和return 三个关键字中, break,continue是一起的,return 是函数返回语句,但是返回的同时也将函数停止 break和continue: 退出循环 ...

  4. Ubuntu16.04下编译vim with python support失败的原因

    - youcompleteme原话:On Ubuntu 16.04, Python support was not working due to enabling both Python2 and P ...

  5. django 序列化json问题

    from django.core import serializers @login_required def ajax_get_data(request): json_data = serializ ...

  6. border做箭头的例子

    <style> .test{ margin:0 auto; width:100px; height:100px; background:lightskyblue; position:rel ...

  7. 打印机PCL漏洞原理分析

    0x01 漏洞概要 PCL代表打印机控制语言(Printer Control Language),由惠普公司开发,并被广泛使用的一种打印机协议.关于另一种页面描述语言,应该提一提由Adobe设计的Po ...

  8. centos7 install jdk

    setp1: remove default java [lhs@localhost soft]$ rpm -qa | grep javajava-1.7.0-openjdk-1.7.0.75-2.5. ...

  9. hdu 4550 卡片游戏

    http://acm.hdu.edu.cn/showproblem.php?pid=4550 贪心 #include <cstdio> #include <cstring> # ...

  10. Qt: 网络编程之UDP(理论+实例)

    http://blog.csdn.net/rl529014/article/details/52888525