上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 18 下一页
摘要: 组合数,对数。 这道题要用到20w的组合数,如果直接相乘的话,会丢失很多精度,所以用去对数的方式实现。 注意指数,因为取完一次后,还要再取一次才能发现取完,所以是(n+1)次方。 double 会爆掉,需要用long double 然后就是scanf和printf读入输出long doube会发生不可逆转的错误(dev-cpp),所以可以读入输出时候强制转换类型,或者用cin,cout(后... 阅读全文
posted @ 2016-06-12 22:21 invoid 阅读(193) 评论(0) 推荐(0) 编辑
摘要: 数学期望。 过每条河的时间的可能在[L/v,3*L/v]间均匀分布,数学期望为2*L/v。 然后在加上在陆上走的时间。 #include #include #include using namespace std; int n,d,p,L,v,kase; double res; int main() { while(scanf("%d%d",&n,&d)==2 && d) ... 阅读全文
posted @ 2016-06-12 08:08 invoid 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 递推。 用f[n][l][r]表示n个柱子,从左面能看到l个,从右面能看到r个。 如果我们按照从小到大的顺序放置的话,放置最高的柱子后,大量状态都能递推到当前状态,很难写出递推式。 但是我们如果从小到大放置的话,高度为1的柱子放进去只会产生3种不同的情况。 1.最左面.2.中间。3.右面 在中间的哪里是无所谓的。 所以f[i][j][k]=f[i-1][j-1][k]+f[i-1][j... 阅读全文
posted @ 2016-06-11 23:46 invoid 阅读(125) 评论(0) 推荐(0) 编辑
摘要: 递推,组合。 考虑第一名有i个人,则f[n]=sum(C(n,i)*f[n-i]),递推即可.. #include #include #include using namespace std; const int mod = 10056; const int maxn = 1000 + 10; int n=1000,T; int C[maxn][maxn]; int f[maxn]; ... 阅读全文
posted @ 2016-06-11 23:10 invoid 阅读(108) 评论(0) 推荐(0) 编辑
摘要: 递推。 用f[i]代表i个盒子的放法,设g[i]=2^n-f[i],代表i个盒子不满足条件的放法。 枚举第一个U所在的位置j。则方法有g[j-2]*(2^(i-j-2))种,j-1必须是L。 所以就慢慢递推了。。。 #include #include #include using namespace std; const int maxn = 100 + 10; int... 阅读全文
posted @ 2016-06-11 22:53 invoid 阅读(127) 评论(0) 推荐(0) 编辑
摘要: 状态压缩,记忆化搜索。 用一个5进制数来表示每堆排到了哪一个位置。和2进制是一样的,不过不能用位运算。 #include #include #include using namespace std; const int maxn = 2000000+10; double dp[maxn]; bool vis[maxn]; char s[10][10][5]; int v,v2; do... 阅读全文
posted @ 2016-06-11 22:48 invoid 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 枚举,条件概率。 2^20次方等于100w,是大约可以没准还能过的。 二进制枚举时,如果买东西的人恰好为r个,设概率为p,就将sum[i]+=p(sum[i]为r个人买东西时第i个人买东西的概率),tot+=p(tot为r个人买东西的概率) 要求的就是sum[i]/tot。 P(第i个人实际买东西)=P(r个人买东西且第i个人在其中)/P(r个人买东西)。 r为0时特判 #inc... 阅读全文
posted @ 2016-06-11 16:11 invoid 阅读(107) 评论(0) 推荐(0) 编辑
摘要: 解码,暴力。 恬不知耻地把暴力题解放了上来,因为k比较小,直接暴力找到字符串第k大就可以了。 编码解码就是根据组合数学公式算出来它到底在哪。 dfs返回bool就能使得找到字典序第k大字符串以后退出dfs,节省时间。 #include #include #include using namespace std; const int maxl = 30; char s[3][maxl... 阅读全文
posted @ 2016-06-11 13:28 invoid 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 筛法。 首先使cnt[i]=sqr(n/i),这样cnt[i]就表示gcd(x,y)大于等于i的数对的个数,然后倒序枚举减去gcd大于i的个数就可以得到ans[i]。最终得到ans[1]。 这个算法单次复杂度是O(n)的,和欧拉函数线性筛一样,不过更好写。 但是T=600,欧拉函数只需要计算一次,每次输出就可以了,所以在T很大的情况下还是欧拉函数更好。 反正水题。。。 #inclu... 阅读全文
posted @ 2016-06-11 10:54 invoid 阅读(136) 评论(0) 推荐(0) 编辑
摘要: 唯一分解定理。 可以看出在最后每个a的系数是杨辉三角的第n行。 但是不能递推,否则会tle。 就从C(n-1,0)开始乘n-k再除以k。记录下每个的系数,如果该项系数小于m就代表和答案有关。 代码里的ok为true时,代表和答案有关。 #include #include #include #include using namespace std; const int maxn = ... 阅读全文
posted @ 2016-06-10 23:51 invoid 阅读(159) 评论(0) 推荐(0) 编辑
上一页 1 ··· 5 6 7 8 9 10 11 12 13 ··· 18 下一页