上一页 1 2 3 4 5 6 7 8 9 10 ··· 15 下一页
摘要: 题解写了N多方法,我用的是最水的那种。。 起始区间只有(0 <= Fi <= 500),500秒之后排名必然不会变化了。。所以,暴力500秒,然后排个序就行了。 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #define MAXN 50010 5 struct stt{ 6 int s,t,v,id; 7 bool operator <(const stt& st)const{ 8 return t>st.t||(t==st.t& 阅读全文
posted @ 2012-09-23 11:45 Burn_E 阅读(149) 评论(0) 推荐(0)
摘要: 求比N小的因数最多的数,因数相同时取较小的的。(N<=10^80) 没想法的题目,没想到是搜索。。 首先因子数目 f[i] = ∏(p[i]+1) ,p[i]是所有质因数的个数,这个应该都知道。如果要使因子最多并且数最小,不会用到太大的质数,这个我也不知道怎么证明。。原题解也没有证明。。。 用一个四元组[K,F,N,A[]]表示数K有F个因数,包含N个质因数,每个质因数P[i]分别有A[i]个。然后搜索就可以了,添加一个已有质数A[i],四元组转化为[K*P[i],F/(A[i]+1)*(A[i]+2),N,A[i]+1],添加一个新的质数A[i],四元组转化为,[K*P[i],F*.. 阅读全文
posted @ 2012-09-23 11:33 Burn_E 阅读(380) 评论(0) 推荐(0)
摘要: 给出一个区间以及两种区间操作,[1 l,r,c]把l~r的点染成c色,[2,l,r,c]查询l~r内颜色为c的点的数目。 因为c的数目太大,用线段树是存不下的,所以只能另辟蹊径了。虽然网上有线段树的方法,但那个Max-Min剪枝完全是没有作用的,随便出一组数据,把所有点间隔染成3,5,然后查4,这样用线段树不知道要跑多久。。。 题解说这题是裸的分块HASH。。还没写过,学习了。其实就是将原区间划分乘sqrt(n)个区间,每次暴力查询和跟新两边的区间,中间的区间直接用hash存每种颜色的节点的数量。这里用到了类似线段树的lazy思想,区间成段修改直接打个标记,等到要划分这个区间的时候先把... 阅读全文
posted @ 2012-09-23 11:11 Burn_E 阅读(460) 评论(0) 推荐(0)
摘要: 求把一个数拆成N个非1的数相乘的方案数有多少种(顺序不一样的算不一样的)。 如果不考虑是否为1的方案数,对原数所有的质因数直接用插板法然后乘起来就可以了,麻烦的是有一个所有数都不能为1的问题,这里可以用容斥原理组成。用f(i)表示有i~N个1的方案数,用x[i]表示确切有i个0的方案数。我们可以得到如下方程组:f(0)=1x[0]+1x[1]+1x[2]+1x[3]+....;f(1)= 1x[1]+2x[2]+3x[3]+....;f(2)= 1x[1]+3x[3]+...;f(3)= 1x[3]+...; 比如在算f(1)的时候,假设有3位数,我们枚举每一位为1,会产生重复的情况... 阅读全文
posted @ 2012-09-23 10:57 Burn_E 阅读(323) 评论(0) 推荐(0)
摘要: 给出N个点,生成每条边的概率是pi,问生成一幅连通图的期望。 一开始正着想,感觉很复杂,无从下手,看了题解才发现原来是反过来思考的。。d[i]表示生成i个点的连通图的概率,那只要求出对应的不连通的概率,然后一减就可以了。生成不连通图的情况,就是从i-1个点中,选出1~n-1个点,选出的点和i连通而和其它点不连通,把所有的概率加起来就是生成不连通图的概率。。 1 #include <string.h> 2 #include <stdio.h> 3 #include <math.h> 4 int n; 5 double p, d[30], c[31][31]; 阅读全文
posted @ 2012-09-21 22:12 Burn_E 阅读(294) 评论(0) 推荐(0)
摘要: 这个模型跟小时候玩的大富翁棋类游戏差不多,起点是0,终点是N,每次掷骰子走1~6步,格子分为3种,前进1~6格,后退1~6格,以及停止一回合,求到达终点所需回合数的期望。 用E(I)表示从第I个格子走到终点所需回合的期望,E(N)=0,转移方程为 E(I)=sum(1/6*(E(K1)+1))+sum(1/6*(E(K2)+2))。K1,K2都是从I掷1~6能走到的格子,如果这个格子有操作,就要跳到操作后的格子,第一个sum里求的是不会停一回合的期望和,第二个sum里求的是走到停一回合格子的期望和。 因为有后退操作,所以转移是有环的,不能用记忆化搜索,要用高斯消元来做。 一开始可以D... 阅读全文
posted @ 2012-09-21 12:12 Burn_E 阅读(432) 评论(0) 推荐(0)
摘要: 给出N个点M条边,每次等概率的给这张图加一条边,求连通这个图加边次数的期望。 这题我们并不关心图的形状,只要知道图的连通情况即可,即这张图有几个连通块,每个连通块中有几个顶点。比如,我们用E(2,3,3)表示当这个图有3个连通块,每个连通块中的顶点数分别是2,3,3时,我们把它连通所需加边的期望,对于8个顶点的图,E(8)=0。可以得到转移方程 E(2,3,3)=p1*E(2,3,3)+p2*E(2,6)+p3*E(3,5)+1。 把右边的第一项移到左边,然后用记忆化搜索就可以求解了。 其中p1,p2,p3是转移到其它连通情况的概率,在8个点里连一条边,总的方案数显然是C(8,2)... 阅读全文
posted @ 2012-09-21 11:15 Burn_E 阅读(699) 评论(0) 推荐(0)
摘要: 给一个有向图,每个顶点的出度为1,A和B是图中的两个顶点,A和B每次只能走一步或者不走,设他们相遇时A走了X步,B走了Y步,使max(x,y)最大,有多解时,使min(x,y)最小,如果还有多解,使x>=y。 其实这个图最特殊的地方就是它每个顶点的出度仅为1。我们都知道树的特性是除了根节点外每个顶点的入度为1,那我们把这个图全部建反向边,也就是说每个顶点的入度为1。但是这个图是有环的,它没有入度为0的根,如果我们把环缩成一个点的话,就会发现这个环的整体入度为0,因为每个点在构环的时候入度就已经饱和了,同样,我们也很容易证明每个连通块至多只有一个环,因为一个连通块不可能有两个入度为0的点, 阅读全文
posted @ 2012-09-20 10:13 Burn_E 阅读(875) 评论(0) 推荐(0)
摘要: 按S+W排序即可。 1 #include <stdio.h> 2 #include <string.h> 3 #include <algorithm> 4 #define MAXN 100005 5 typedef long long LL; 6 struct ppp{ 7 int s, w; 8 bool operator < (const ppp& p) const { 9 return s + w <= p.s + p.w;10 }11 }p[MAXN];12 int n;13 int main() {14 while (scanf 阅读全文
posted @ 2012-09-20 09:23 Burn_E 阅读(127) 评论(0) 推荐(0)
摘要: 求用一个串的四个子串能覆盖原串的最大和最小长度。 比赛的时候没有出这一题,其实思路上差不多都是对的,但细节上没有实现好。。 三维的字符串DP,首先处理出每个子串能够开始的位置,这个暴力一下就行。然后用d[i][j][k]表示长度为i状态为j从当前位置开始已经有k个字符被覆盖的最小长度,j是个四位的二进制状态,为1代表已经使用了这个串。当前位置可以选择使用或者不使用新的未使用子串,DP的时候采用刷表会好写的多。 最小和最大的求法是一样的,开两个数组会爆空间。。改用short就行了。。其实写个函数也挺方便的。。 1 #include <string.h> 2 #include < 阅读全文
posted @ 2012-09-20 09:08 Burn_E 阅读(340) 评论(0) 推荐(0)
上一页 1 2 3 4 5 6 7 8 9 10 ··· 15 下一页