Mysterious For(hdu4373)
Mysterious For
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 694 Accepted Submission(s): 264
This special program was called "Mysterious For", it was written in C++ language, and contain several simple for-loop instructions as many other programs. As an ACMer, you will often write some for-loop instructions like which is listed below when you are taking an ACM contest.
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
for (int k = j; k < n; k++) {
blahblahblah();
}
}
}
Now, MatRush has designed m for-loop instructions in the "Mysterious For" program, and each for-loop variable was stored in an array a[], whose length is m.
The variable i represents a for-loop instructions is the i-th instruction of the "Mysterious For" program.There only two type of for-loop instructions will occur in MatRush's "Mysterious For" program:
1-type: if a for-loop belongs to 1-type, it will be an instruction like this:
for (int a[i] = 0; a[i] < n; a[i]++) {
...
}
2-type: if a for-loop belongs to 2-type, it will be an instruction like this:
for (int a[i] = a[i - 1]; a[i] < n; a[i]++) {
...
}
In addition, after the deepest for-loop instruction there will be a function called HopeYouCanACIt(), here is what's inside:
void HopeYouCanACIt() {
puts("Bazinga!");
}
So, the "Mysterious For" program, obviously, will only print some line of the saying: "Bazinga!", as it designed for.
For example, we can assume that n equals to 3, and if the program has three 1-type for-loop instructions, then it will run 33=27 times of the function HopeYouCanACIt(), so you will get 27 "Bazinga!" in total. But if the program has one 1-type for-loop instruction followed by two 2-type for-loop instructions, then it will run 3+2+1+2+1+1=10 times of that function, so there will be 10 "Bazinga!" on the screen.
Now MatRush has the loop length n and m loop instructions with certain type, then he want to know how many "Bazinga!" will appear on the screen, can you help him? The answer is too big sometimes, so you just only to tell him the answer mod his QQ number:364875103.
All for-loop instructions are surely nested. Besides, MatRush guaranteed that the first one belongs to the 1-type. That is to say, you can make sure that this program is always valid and finite. There are at most 15 1-type for-loop instructions in each program.
For every case, there are 2 lines.
The first line is two integer n(1<=n<=1000000) and m(1<=m<=100000) as described above.
The second line first comes an integer k(1<=k<=15), represents the number of 1-type loop instructions, then follows k distinctive numbers, each number is the i-th 1-type loop instruction's index(started from 0), you can assume the first one of this k numbers is 0 and all numbers are ascending.
All none 1-type loop instructions of these m one belongs to 2-type.
3 3
3 0 1 2
3 3
1 0
3 3
2 0 2
4 4
4 0 1 2 3
10 10
10 0 1 2 3 4 5 6 7 8 9
Case #2: 10
Case #3: 18
Case #4: 256
Case #5: 148372219
For the third program, the code is like this:
for (int a[0] = 0; a[0] < n; a[0]++) {
for (int a[1] = a[0]; a[1] < n; a[1]++) {
for (int a[2] = 0; a[2] < n; a[2]++) {
HopeYouCanACIt();
}
}
}
Because n = 3, the answer is 3*3+2*3+1*3=18.
m个for循环嵌套,有两种形式,第一类从1开始到n,第二类从上一层循环当前数开始到n,第一层一定是第一种类型,问总的循环的次数对364875103取余的结果。
剩下的就是第二类循环的问题,假设一个m层循环,最大到n,
只有第一层:循环n次。C(n, 1)
只有前两层:循环n + (n - 1) + ... + 1 = (n + 1) * n / 2 = C(n + 1, 2);}
1 #include <cstdio>
2 #include <cstdlib>
3 #include <cstring>
4 #include <cmath>
5 #include <iostream>
6 #include <algorithm>
7 #include <map>
8 #include <queue>
9 #include <vector>
10 using namespace std;
11 typedef long long LL;
12 bool flag[1000005];
13 LL N1[1200005];
14 LL N2[1200005];
15 const LL mod1=97;
16 const LL mod2=364875103/97;
17 LL quick(LL n,LL m,LL p);
18 LL lucas(LL n,LL m,LL p);
19 pair<LL,LL> CHA(LL *a,LL n,LL *b);
20 LL a[10];
21 LL b[10];
22 int main(void)
23 {
24 LL i,j;
25 int ca=0;
26 int k;
27 scanf("%d",&k);
28 LL n,m;
29 N1[0]=1;
30 N2[0]=1;
31 N2[1]=1;
32 N1[1]=1;
33 for(i=2; i<1200005; i++)
34 {
35 N1[i]=(N1[i-1]*i)%mod1;
36 N2[i]=(N2[i-1]*i)%mod2;
37 }
38 while(k--)
39 {
40 ca++;
41 scanf("%lld %lld",&n,&m);
42 LL s;
43 for(i=0; i<1000005; i++)
44 flag[i]=false;
45 scanf("%lld",&s);
46 LL t;
47 for(i=0; i<s; i++)
48 {
49 scanf("%lld",&t);
50 flag[t]=true;
51 }
52 LL ack=1;
53 LL alk=1;
54 for(i=0; i<m;)
55 {
56 if(flag[i]&&(flag[i+1]&&i!=m-1||i==m-1))
57 {
58 ack=ack*n%mod1;
59 alk=alk*n%mod2;
60
61 i++;
62 }
63 else
64 {
65 for(j=i+1; j<m; j++)
66 {
67 if(flag[j])
68 break;
69 }
70 LL cc=j-i;
71 i=j;
72 LL x=N2[n+cc-1];
73 LL y=N2[cc]*N2[n-1];
74 x=x*quick(y,mod2-2,mod2)%mod2;
75 LL ap=lucas(cc,n+cc-1,mod1);
76 ack=ack%mod1*ap%mod1;
77 alk=alk%mod2*(x)%mod2;
78 }
79 }
80 LL sum=mod1*mod2;
81 memset(a,0,sizeof(a));
82 memset(b,0,sizeof(b));
83 a[0]=mod1;
84 b[0]=ack;
85 b[1]=alk;
86 a[1]=mod2;
87 LL an=0;
88 pair<LL,LL>NA=CHA(a,2,b);
89 printf("Case #%d: %lld\n",ca,NA.first%(mod1*mod2));
90 }
91 return 0;
92 }
93 pair<LL,LL> CHA(LL *a,LL n,LL *b)
94 {
95 int i,j;
96 LL sum=1;
97 LL answer=0;
98 for(i=0; i<n; i++)
99 {
100 sum*=a[i];
101 }
102 for(i=0; i<n; i++)
103 {
104 LL t=sum/a[i];
105 LL ni=quick(t,a[i]-2,a[i]);
106 LL ask=ni*b[i]%sum;
107 ask=ask*t%sum;
108 answer+=ask;
109 answer%=sum;
110 }
111 return make_pair(answer,sum);
112 }
113 LL quick(LL n,LL m,LL p)
114 {
115 n%=p;
116 LL ak=1;
117 while(m)
118 {
119 if(m&1)
120 {
121 ak=ak*n%p;
122 }
123 n=n*n%p;
124 m/=2;
125 }
126 return ak;
127 }
128 LL lucas(LL n,LL m,LL p)
129 {
130 if(n==0)
131 {
132 return 1;
133 }
134 else
135 {
136 LL nx=n%p;
137 LL ny=m%p;
138 if(nx>ny)
139 {
140 return 0;
141 }
142 else
143 {
144 LL x=N1[nx]*N1[ny-nx]%p;
145 LL y=quick(x,p-2,p)*N1[ny]%p;
146 return y*lucas(n/p,m/p,p)%p;
147 }
148 }
149 }
Mysterious For(hdu4373)的更多相关文章
- 【转】get a mysterious problem,when i use HttpWebRequest in unity c# script
in script,i use HttpWebRequest to get service from network.but it comes a mysterious problem. the so ...
- D - Mysterious Present
这个题和求最长递增序列的题类似,为了能输出一组可行的数据,我还用了一点儿链表的知识. Description Peter decided to wish happy birthday to his f ...
- codeforces Gym 100187H H. Mysterious Photos 水题
H. Mysterious Photos Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100187/p ...
- 黑龙江省第七届大学生程序设计竞赛-Mysterious Organization
描述 GFW had intercepted billions of illegal links successfully. It has much more effect. Today, GFW i ...
- D. Mysterious Present (看到的一个神奇的DP,也可以说是dfs)
D. Mysterious Present time limit per test 2 seconds memory limit per test 64 megabytes input standar ...
- (20)The most mysterious star in the universe
https://www.ted.com/talks/tabetha_boyajian_the_most_mysterious_star_in_the_universe/transcript00:12E ...
- qq飞车精灵家园里的背景音乐:Mysterious Town pooka 下载
一直都觉得Mysterious Town pooka特别好听,但是酷狗音乐和网上直接搜搜不到,于是我直接从源文件中找了出来.虽然是.ogg格式,但是在酷狗音乐里还是可以播放的.貌似是<奥丁领 ...
- LightOJ 1220 Mysterious Bacteria(唯一分解定理 + 素数筛选)
http://lightoj.com/volume_showproblem.php?problem=1220 Mysterious Bacteria Time Limit:500MS Memo ...
- IEEEXtreme 10.0 - Mysterious Maze
这是 meelo 原创的 IEEEXtreme极限编程大赛题解 Xtreme 10.0 - Mysterious Maze 题目来源 第10届IEEE极限编程大赛 https://www.hacker ...
随机推荐
- javaSE高级篇5 — java8新特性详解———更新完毕
java8新特性 在前面已经见过一些东西了,但是:挖得有坑儿 1.lambda表达式 lambda表达式是jdk1.8引入的全新语法特性 它支持的是:只有单个抽象方法的函数式接口.什么意思? 就是说: ...
- OAuth2.0实战!使用JWT令牌认证!
大家好,我是不才陈某~ 这是<Spring Security 进阶>的第3篇文章,往期文章如下: 实战!Spring Boot Security+JWT前后端分离架构登录认证! 妹子始终没 ...
- 【PS算法理论探讨一】 Photoshop中两个32位图像混合的计算公式(含不透明度和图层混合模式)。
大家可以在网上搜索相关的主题啊,你可以搜索到一堆,不过似乎没有那一个讲的很全面,我这里抽空整理和测试一下数据,分享给大家. 我们假定有2个32位的图层,图层BG和图层FG,其中图层BG是背景层(位于下 ...
- above, abrupt
above 近义词: over, beyond, exceeding反义词: below, beneath, under, underneath 有从右往左写的文字,没有从下往上的.above-men ...
- accommodate, accompany
accommodate 词源: to make fit, suitable; 近/反义词: adapt, adjust, lodge; disoblige, incommode, misfit Lod ...
- [云原生]Docker - 镜像
目录 Docker镜像 获取镜像 列出本地镜像 创建镜像 方法一:修改已有镜像 方法二:通过Dockerfile构建镜像 方法三:从本地文件系统导入 上传镜像 保存和载入镜像 移除本地镜像 镜像的实现 ...
- Hive(五)【DQL数据查询】
目录 一. 基本查询 1.1 算数运算符 1.2 常用聚合函数 1.3 limit 1.4 where 1.5 比较运算符(between|in|is null) 1.6 LIKE和RLIKE 1.7 ...
- Vue局部组件和全局组件
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 【Jenkins系列】-备份机制
Jenkins是主从模式,从节点可以做集群.负载,从而实现从节点的高可用,但是主节点是单节点,一旦主节点宕机,会导致Jenkins服务不可用.Jenkins主节点本身是不支持集群的,需要通过其他变通方 ...
- 【kafka学习笔记】合理安排broker、partition、consumer数量
broker的数量最好大于等于partition数量 一个partition最好对应一个硬盘,这样能最大限度发挥顺序写的优势. broker如果免得是多个partition,需要随机分发,顺序IO会退 ...