HDU 5139 Formula 卡内存

题目就是求这个

n达到10^7,测试数据组数为10^5

 

为了防止TLE,一开始把每个n对应的值先求出来,但发现竟然开不了10^7的数组(MLE),然后就意识到这是第一道卡内存的题目。。。

只能离线做,把每个n从小到大排序,然后从小到大依次求,然后把结果存下来,最后排回去输出。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<vector>
#include<queue>
#include<string>
#include<sstream>
#define eps 1e-9
#define ALL(x) x.begin(),x.end()
#define INS(x) inserter(x,x.begin())
#define FOR(i,j,k) for(int i=j;i<=k;i++)
#define MAXN 100005
#define MAXM 10000005
#define INF 0x3fffffff
#define MOD 1000000007
using namespace std;
typedef long long LL;
struct node
{
    int num,i,ans;
};
int i,n,size,maxn,p;
node G[MAXN];
bool flag;
bool cmp(node x,node y)
{
    return x.num<y.num;
}
bool cmp2(node x,node y)
{
    return x.i<y.i;
}
int main()
{
    while (~scanf("%d",&n))
    {
        G[size].num=n;
        G[size].i=size;
        size++;
    }
    sort(G,G+size,cmp);
    LL mul=1;
    LL last=0;
    LL d=1;
    for (p=0;p<size;p++)
    {
        for (i=last+1;i<=G[p].num;i++)
        {
            mul=(mul*i)%MOD;
            d=(d*mul)%MOD;
        }
        G[p].ans=d;
        last=G[p].num;
    }
    sort(G,G+size,cmp2);
    for (i=0;i<size;i++)
    {
        printf("%d\n",G[i].ans);
    }
    return 0;
}

  

 

posted @   zhyfzy  阅读(160)  评论(0编辑  收藏  举报
编辑推荐:
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
阅读排行:
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 《SpringBoot》EasyExcel实现百万数据的导入导出
点击右上角即可分享
微信分享提示