题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5139

题目意思:给出一个数 n,求出 f(n)。

  

  可以发现有以下规律:

  f(1) = 1!

  f(2) = 1! * 2!

  f(3) = 1! * 2! * 3!

  f(n) = 1! * 2! * 3! *....... * (n-1)! * n!

  我一开始对题解中的 直接打表超内存  不太理解,于是就实践了下:

  超内存版本(就是直接算 f[n],当输入n的时候,输出  f[n]):

(原来开 大小为 1e7 的数组会这样滴,长见识了~~)

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MOD = 1e9 + ;
const int maxn = 1e7 + ; int f[maxn]; int main()
{
int p = , s = ;
for (int i = , j = ; i <= maxn; i++)
{
while (j <= i)
{
p = 1ll * p * j % MOD;
s = 1ll * s * p % MOD;
j++;
}
f[i] = s;
}
int n;
while (scanf("%d", &n) != EOF)
printf("%d\n", f[n]);
return ;
}

  所以就要离线处理了,这位大哥讲得比较好。

http://blog.csdn.net/sr_19930829/article/details/41785767

  即:对数据统一输入,统一处理,最后统一输出。

而为了防止超内存,开 1e5 大小的数组保存答案就可以了,因为题目中说了 cases 大约为100000。

  输入完之后就要从小到大排序了,这样的好处能保证每个阶乘只计算一遍。而为了对应输入的顺序,需要 pair 数组的second 来保存序号。

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; const int MOD = 1e9 + ;
const int maxn = 1e5 + ; pair<int, int> pii[maxn];
int ans[maxn]; int main()
{
int cnt = ;
while (scanf("%d", &pii[cnt].first) != EOF)
{
pii[cnt].second = cnt;
cnt++;
} sort(pii, pii+cnt);
int p = , s = ;
for (int i = , j = ; i < cnt; i++)
{
while (j <= pii[i].first)
{
p = 1ll * p * j % MOD;
s = 1ll * s * p % MOD;
j++;
}
ans[pii[i].second] = s;
}
for (int i = ; i < cnt; i++)
printf("%d\n", ans[i]);
return ;
}

BestCoder21 1002.Formula 解题报告的更多相关文章

  1. BestCoder36 1002.Gunner 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5199 题目意思:给出鸟在树上的高度,以及射击到的高度,问每次射击能射中鸟的数量 用 vector 里面 ...

  2. 【九度OJ】题目1176:树查找 解题报告

    [九度OJ]题目1176:树查找 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1176 题目描述: 有一棵树,输出某一深度的所有节点 ...

  3. 【九度OJ】题目1445:How Many Tables 解题报告

    [九度OJ]题目1445:How Many Tables 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1445 题目描述: ...

  4. 【九度OJ】题目1109:连通图 解题报告

    [九度OJ]题目1109:连通图 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1109 题目描述: 给定一个无向图和其中的 ...

  5. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  6. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  7. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  8. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  9. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

随机推荐

  1. 源码编译安装 screen

    本文转自:http://blog.163.com/oracle_wwf/blog/static/213030127201211191481101/ [root@web1 soft]# wget ftp ...

  2. MYSQL 连接数据库命令收藏

    一.MySQL 连接本地数据库,用户名为“root”,密码“123”(注意:“-p”和“123” 之间不能有空格) C:\>mysql -h localhost -u root -p123 二. ...

  3. XMAL语法系列之-(2)---WPF控件继承图

    WPF控件继承图 1 FrameworkElement 1.1 Panel(面板类元素) 1.1.1 Canvas 1.1.2 DockPanel 1.1.3 Grid 1.1.4 TabPanel ...

  4. godaddy空间的sql server数据库没办法insert中文

    原来的代码: use string007 from sysobjects where id = object_id('K_V_TEST') and type = 'U') drop table K_V ...

  5. Go - template 常用方法详解 及 注意事项

    Go template包下面有两个函数可以创建模板实例 func New(name string) *Template func ParseFiles(filenames ...string) (*T ...

  6. Mac下的串口通信-ORSSerialPort

    ================================2015/11/05======================================= 最近在工作中遇到有关Mac下串口通信 ...

  7. androids-addjavascriptinterface-equivalent-in-ios

    http://stackoverflow.com/questions/7103159/androids-addjavascriptinterface-equivalent-in-ios

  8. post 之checkbox 未被选中解决方法

    第一种方法: http://cnn237111.blog.51cto.com/2359144/1293812 第二种方法(推荐): http://blog.csdn.net/xyanghomepage ...

  9. Hello 畅连·西瓜 帮助与更新

    无感认证很好用,软件不再更新, 感谢每一位朋友的陪伴,谢谢! (2016.12.15) 百度云:点击下载 ------------旧版更新日志------------- Hello 畅连·西瓜 官网: ...

  10. Java 7 Concurrency Cookbook 翻译 第一章 线程管理之二

    三.中断一个线程 一个拥有多个线程的Java程序要结束,需要满足两个条件之一:一是所有的非后台线程都执行结束了:二是某个线程执行了 System.exit() 方法.当你想要终结一个运行中的Java程 ...