上一页 1 2 3 4 5 6 7 ··· 15 下一页
摘要: 求从1开始,在一个有向图中经过某条边次数的期望。 E[p]=sigma(E[t]/deg[t]),t为能到p的点的集合,deg[t]为t的度数。对于起点要额外加1,因为第一次肯定会被运行一次。 高斯消元看的Rujia的代码,注意对无解的判断。 1 #include <string.h> 2 #include <stdio.h> 3 #include <vector> 4 #include <math.h> 5 #define MAXN 105 6 using namespace std; 7 const double eps = 1e-9; 8 阅读全文
posted @ 2012-10-31 01:00 Burn_E 阅读(274) 评论(0) 推荐(0)
摘要: 给一个数N,每步随机选一个不大于N的质数X,若X整除N,则N=N/X,否则N不变。求N变为1的期望步数。 常规的期望DP,先预处理不大于N的质数个数以及N的质因数,d[n]=p0*d[n]+p1*d[n/d1]+p1*d[n/d2]...+1,其中d1,d2..是n的质因数,p0为选中一个质数不为n的质因数的概率,移项即可得到d[n]的表达式。 1 #include <string.h> 2 #include <stdio.h> 3 #include <vector> 4 #define MAXN 1000005 5 using namespace std; 阅读全文
posted @ 2012-10-30 01:25 Burn_E 阅读(295) 评论(0) 推荐(0)
摘要: 一个游戏胜利的概率为p,小明每天晚上都会玩这个游戏直到胜利的比例大于p为止,他就会认为今天胜利了,但每天至多只能玩N次。小明会一直玩这个游戏直到有一天失败为止。求小明玩这个游戏天数的期望。 首先,假设小明每天玩这个游戏胜利的概率为q,根据期望公式有S=∑i*q^i*(1-q)。用数学方法化简可以得到S=1/(1-q),现在问题就转化为求q。 直接用概率论没想出来怎么搞,由于N比较小,可以想到用DP来解,用d[i][j]表示第i天赢了j次并且目前没有获得胜利的概率,有d[i][j]=d[i-1][j-1]*p+d[i-1][j]*(1-p)。 1 #include <stdio.h> 阅读全文
posted @ 2012-10-30 00:45 Burn_E 阅读(251) 评论(0) 推荐(0)
摘要: A在[S1,S2]到达,B在[T1,T2]到达,到达后都会等W分钟,问相遇的概率。 概率论课本上的题目了,列出三个方程s1<=S<=s2,t1<=T<=t2,|T-S|<=w。然后可以转化为几何图形求面积,需要讨论求解。 1 #include <string.h> 2 #include <stdio.h> 3 int cas, t1, t2, s1, s2, w; 4 double area(int w){ 5 int lc = t1+w, rc = t2+w, uc = s2-w, dc = s1-w; 6 if (lc >= s2 阅读全文
posted @ 2012-10-29 18:09 Burn_E 阅读(351) 评论(0) 推荐(0)
摘要: 一开始有K只兔子(不知道原题中是什么生物=。=),每只兔子能活一天并有pi的概率生出i只新兔子,求m天后所有兔子死光的概率。 概率递推,设D[m]为m天后兔子全死光的概率,则D[m] = D[m-1]^0*p0+D[m-1]^1*p[1]+...D[m-1]^i*pi.. 1 #include <string.h> 2 #include <math.h> 3 #include <stdio.h> 4 int cas, n, m, k; 5 double p[1005], d[1005]; 6 double dp(int x){ 7 if (x == 0) r 阅读全文
posted @ 2012-10-29 17:19 Burn_E 阅读(280) 评论(0) 推荐(0)
摘要: 枚举统计所有<=L/2的数,在找到是否存在一个>L/2的数使所有其它数加上它都不大于L即可。 注意枚举的时候把模运算进行转化。 1 #include <stdio.h> 2 #include <string.h> 3 #define INF 0x7fffffff 4 typedef __int64 LL; 5 int n, l, a, b, mod; 6 int main(){ 7 //freopen("test.in", "r", stdin); 8 while (scanf("%d%d%d%d%d&quo 阅读全文
posted @ 2012-10-15 22:50 Burn_E 阅读(188) 评论(0) 推荐(0)
摘要: 用1~N构造一个序列,使max(最长上升子序列,最长下降子序列)最小,并且字典序最小。 最近做的构造题好多,这种1~N的序列大多是sqrt(n)的构造。。 官方题解: 其实这是个挺有趣的题,你需要构造一个 1..N 的排列,使得其最长上升序列的长度和最长下降序列的长度的最大值最小。应该比较容易能够想到这个答案是 sqrt(N) 级别的,这个结论的证明可以参考吴文虎的那本组合数学 p21 。 当然这还没有结束,怎么找字典序最小的那个解呢?先看看完全平方数吧,对于 4 ,我们有 2 1 4 3 ,对于 9 ,我们有 3 2 1 6 5 4 9 8 7 。嗯,完全平方数的规... 阅读全文
posted @ 2012-10-15 22:43 Burn_E 阅读(334) 评论(0) 推荐(0)
摘要: 给出一个N*M的矩阵,其中有些格子不可走。一个机器人想要通过命令从起点走到终点,命令分为三种,左转右转和前进,先给出一个只包含左转和右转的指令序列,问是否能够通过增加有限个的前进指令,使该指令可以完成从起点到终点。 N和M的范围是1000,指令长度为1000000,必然有巧妙的方法。 首先,执行完每个命令的朝向肯定是固定的,所以如果能更早的到达某一个格子的某个方向,必然会选择最早的到达方法,问题转化为求最早到达d[x][y][d]这个状态所需要的指令数。这里可以看作最短路的问题,用一个优先队列来解决,但是每次选择是LogN的。 有更优的方法在O(1)的复杂度实现选择,处理出每个命令下... 阅读全文
posted @ 2012-10-15 22:35 Burn_E 阅读(286) 评论(0) 推荐(0)
摘要: N层楼,每层M个有分数的格子,一开始在第一层的S点,每层最多不能连续走T个就必须下楼,求到达最底层能获得的最大分数。 经典的单调队列优化问题,用A[i][j]表示前缀和,now表示当前层,pre表示上一层,可以得到以下递推式: 当前层从左向右走,d[now][i]=max(d[pre][j]+A[now][i]-A[now][j-1]) = max((d[pre][j]-A[now][j-1])+A[now][i]) (j<=i) 当前层从右向左走,d[now][i]=max(d[pre][j]+A[now][j]-A[now][i-1]) = max((d[pre][j]+A[no.. 阅读全文
posted @ 2012-10-10 10:24 Burn_E 阅读(261) 评论(0) 推荐(0)
摘要: 定义两类循环,第一类就是最简单的for(int i=0;i<n;i++)....第二类就是类似与for(int i=0;i<n;i++)for(int j=i;j<n;j++)for(int k=j;k<n;k++)..一共有M<100000个循环,其中一类不超过15个,求最内层循环内的语句执行的次数。 对每一段连续的二类循环,可以想到就是求从N个数里选出M个数组成一个序列,这个序列满足不降性质,求这样的序列有多少个。 理解为插板,M个数N-1个板,在Ai和Ai-1数之间插x个板代表Ai-Ai-1=x。所以答案就是C(M+N-1,N-1)。 组合数比较大,因为给的 阅读全文
posted @ 2012-10-10 10:16 Burn_E 阅读(363) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 ··· 15 下一页