题目链接: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. MYSQL 连接数据库命令收藏

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

  2. c# 字符串前加@

    @在c#中为强制不转义的符号,在里面的转义字符无效. 例如:Console.WriteLine("你好\t吗?"); Console.WriteLine(@"你好\t吗& ...

  3. ADB常用命令(Android Debug Bridge)

    首先要配置环境变量. adb devices 列出所有的设备 adb start-server 开启adb服务 adb kill-server    关闭adb服务 adb logcat    查看L ...

  4. 有关Highchart的那些事。。。备份一段(稍后修改)

    $(function () { $('#CurrentFinanceChart').highcharts({ title: { text: '' }, xAxis: { type: 'datetime ...

  5. MySql的安装及配置详细指引!

    一.安装My Sql数据库 1.1,首先下载MySQL与HeidiSQL工具,双击打开后可以看到名为”mysql-5.0.22-win32 Setup.exe”的安装程序,双击执行该程序. 1.2,打 ...

  6. java 练手 谁是最好的Coder

    Problem A 谁是最好的Coder 时间限制:1000 ms  |  内存限制:65535 KB   描述 计科班有很多Coder,帅帅想知道自己是不是综合实力最强的coder. 帅帅喜欢帅,所 ...

  7. 微信封号浪潮再起 A货假代购还能在朋友圈泛滥多久?

    你的微信朋友圈是不是很活跃?是不是被很多所谓的名品所包围?没错,这些很多都是A货或假代购的伎俩.如果xmyanke的微信朋友圈出现这些东东,我就会直接屏蔽他的朋友圈权限.具体方法是:打开他的微信详细资 ...

  8. 在WordPress后台菜单系统中添加Home链接

    在wordpress后台如果想打开前台的话,要想先把鼠标移动到左上角菜单,然后在下拉菜单中点击“查看站点”,很是麻烦,能不能在 WordPress 后台菜单系统中添加 Home 链接呢? 将下面代码复 ...

  9. hibernate中get,load,list,iterate的用法及比较

    首先,get和load都是查询单个对象,而list和iterate为批量查询 注意以下写法仅针对hibernate3的语法. 使用案例如下: // 1. get和load 的用法 Person p = ...

  10. 原生态js获取节点的方法

    <input value="我是用id来获取值的" type="button" onclick="GetById()"/> &l ...