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; } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET 9 new features-C#13新的锁类型和语义
· Linux系统下SQL Server数据库镜像配置全流程详解
· 现代计算机视觉入门之:什么是视频
· 你所不知道的 C/C++ 宏知识
· 聊一聊 操作系统蓝屏 c0000102 的故障分析
· 不到万不得已,千万不要去外包
· C# WebAPI 插件热插拔(持续更新中)
· 会议真的有必要吗?我们产品开发9年了,但从来没开过会
· 如何打造一个高并发系统?
· 《SpringBoot》EasyExcel实现百万数据的导入导出