cf697e&&cf696cplease

Izaya Izaya     2022-08-28     521

关键词:

题意:给你三个杯子,一开始钥匙放在中间的杯子里,然后每一回合等概率将左右两个杯子中的一个与中间杯子交换。求n回合之后钥匙在中间杯子的概率。这里要求概率以分数形式输出,先化成最简,然后对1e9 + 7取模。

题解:首先我们可以轻易得到一个递推式:$ d[i] = frac{{1 - d[i - 1]}}{2} $

但递推式是不行的,我们要得到一个封闭形式。

运用数列技巧,我们可以进行如下变换:$d[i] - frac{1}{3} =  - frac{1}{2}(d[i - 1] - frac{1}{3})$

那么我们有 $d[n] = frac{{{{( - 1)}^n} + {2^{n - 1}}}}{{3 imes {2^{n - 1}}}}$

其中我们发现,${{{( - 1)}^n} + {2^{n - 1}}}$ 一定是3的倍数,且商一定是奇数,所以与剩下部分互质

也即  $p = frac{{{{( - 1)}^n} + {2^{n - 1}}}}{3}$  $q = {2^{n - 1}}$

带进去算就好了。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define LL long long
 4 #define mod 1000000007
 5 
 6 inline LL read() {
 7     LL x = 0, f = 1; char a = getchar();
 8     while(a < 0 || a > 9) { if(a == -) f = -1; a = getchar(); }
 9     while(a >= 0 && a <= 9) x = x * 10 + a - 0, a = getchar();
10     return x * f;
11 }
12 
13 int n, p = 2, q, f = 1;
14 
15 inline int fpow(int x, LL k) {
16     int ret = 1;
17     while(k) {
18         if(k & 1) ret = 1LL * ret * x % mod;
19         k /= 2; x = 1LL * x * x % mod;
20     }
21     return ret;
22 } 
23 
24 int main() {
25     n = read();
26     LL tmp; int inv2 = fpow(2, mod -2), inv3 = fpow(3, mod - 2);
27     for(int i = 1; i <= n; i++) {
28         tmp = read();
29         f = 1LL * f * tmp % 2;
30         p = fpow(p, tmp);
31     }
32     q = 1LL * p * inv2  % mod;    
33     p = 1LL * (q + (f ? -1 : 1)) * inv3 % mod;
34     printf("%d/%d
" ,p ,q);
35     return 0;
36 }

 

bzoj_5301_[cqoi2018]异或序列&&cf617e_莫队

Description已知一个长度为n的整数数列a[1],a[2],…,a[n],给定查询参数l、r,问在[l,r]区间内,有多少连续子序列满足异或和等于k。也就是说,对于所有的x,y(l≤x≤y≤r),能够满足a[x]^a[x+1]^…^a[y]=k的x,y有多少组。Input输... 查看详情

agc006c&cf1110e(代码片段)

这两个题都有一个公用的小trick,所以我就写一起了!AGC006C题目叙述一些兔子站在坐标轴上,兔子的坐标为(x_1,x_2,cdots,x_n)。第(i)只兔子会这样跳跃:随机等概率选择相邻两个兔子之一,以那只兔子为中心,跳到对称的另一边。... 查看详情

bzoj4424:cf19efairy&&codeforces19e.fairy树形dp(代码片段)

参考:https://blog.csdn.net/heheda_is_an_oier/article/details/51131641这个找奇偶环的dp1真是巧妙,感觉像tarjan一样首先分情况讨论,如果没有奇环,每条边都可以删;如果有一个奇环,奇环上隋边山;否则,删被所有奇环覆盖且没被任何一... 查看详情

做题cf196e.openingportals排除无用边&最小生成树(代码片段)

题意:给出一个有(n)个结点,(m)条边的连通无向图,边有边权,等于经过这条边所需的时间。有(k)个点设有传送门。一开始,所有传送门关闭。你从(1)号点出发,每当你到达一个有传送门的点,那个传送门就会永久开启。你可以... 查看详情

cf1076e:vasyaandatree(dfs&差分)(代码片段)

Vasyahasatreeconsistingofn nverticeswithrootinvertex1 1.Atfirstallverticeshas0 0writtenonit.Letd(i,j) d(i,j)bethedistancebetweenverticesi iandj j,i.e.numberofedgesinthesh 查看详情

cf1039dyouaregivenatree&&cf1059esplitthetree的贪心解法

1039D题意:给你一棵树,要求对给定链长于k=1,2,3,...,n,求出最大的链剖分。1059E题意:给你一棵带权树,要求对于一组给定的L,W求出最小完全竖链剖分满足每条链点数不超过L,权值和不超过W。显然两题是有共同点的,就是让我... 查看详情

cf552e.twoteams(代码片段)

...);i++)#definerepp(i,a,b)for(inti=(a);i>=(b);--i)#defineRI(n)scanf("%d",&(n))#defineRII(n,m)scanf("%d%d",&n,&m)#defineRIII(n,m,k)scanf("%d%d%d",&n,&m,&k)#defineRS(s)scanf("%s",s);#definelllonglong#defineREP(i,N)for(inti=0;i<(N);i++)#defineCLR(A,v)m 查看详情

cf715c&&cf716edigittree点分治(代码片段)

题目大意给出一个树,每条边上写了一个数字,给出一个G,求有多少条路径按顺序读出的数字可以被G整除。保证G与10互质。题解双倍经验~首先一条路径顺着读和逆着读是视为两条不同的路径的,即使值一样。同时要注意一条路... 查看详情

cf484esignonfence&&[国家集训队]middle(代码片段)

CF484ESignonFence#include<bits/stdc++.h>#defineRGregister#defineILinline#define_100100#defineinf1e9+7usingnamespacestd;ILintgi()RGintdata=0,m=1;RGcharch=0;while(ch!='-'&&(ch< 查看详情

cf1066a&b&c(代码片段)

A题目链接CF1066AVovaandTrain思路:类似前缀和暴力搞一下code:#include<bits/stdc++.h>usingnamespacestd;intT,L,V,l,r;template<typenameT>inlinevoidread(T&t);intmain()scanf("%d",&T);while(T- 查看详情

cf914gsumthefibonacci快速??变换模板

【CF914G】SumtheFibonacci题解:给你一个长度为n的数组s。定义五元组(a,b,c,d,e)是合法的当且仅当:1.$1lea,b,c,d,elen$2.$(s_a|s_b)&s_c&(s_d$^$s_e)=2^i$,i是某个整数3.$s_a&s_b=0$求$sumf(s_a|s_b)*f(s_c)*f(s_d$^$s_e)$,f是斐波那契数列, 查看详情

cf444e.dzylovesplanting(代码片段)

?????????amp   tin   opera   print   pre   [1]   http   putchar   cti   查看详情

cf696cplease(代码片段)

矩阵快速幂+扩展欧拉定理对于一个矩阵(A),我们有(A^nequivA^n\%phi(m)+phi(m)(\%m))经过简单的列举或推导可得设目前进行了(x)轮,(f(x))为分子,(g(x))为分母则有(f(x)=g(x-1)-f(x-1),g(x)=2g(x-1))由此及首项可得(x>1)时概率的分子一直是奇数,... 查看详情

题解cf#983e-nncountry(代码片段)

...,我们可以直接倍增获得答案,所以以下讨论均为u!=lca&&v!=lca的情况。若在节点u和 查看详情

[cf1539e]gamewithcards(代码片段)

...点进行\\(\\rmDP\\).何为交换点?比如\\[\\beginmatrix\\colorred0&0&0&0&0&\\colorred1&1&1&am 查看详情

cf1527dmextree(mex&树&容斥)(代码片段)

CF1527DMEXTree(mex&树&容斥)考虑简单容斥,meximex_imexi​等于包含[0,i−1][0,i-1][0,i−1]的所有路径减取包含[0,i][0,i][0,i]的路径。记录:ansians_iansi​为包含[0,i][0,i][0,i]的所有路径。mexi=ansi−1−ansimex_i=ans_i-1-a 查看详情

aizu2249&cf449b

Aizu2249&cf449B1、Aizu-2249选的边肯定是最短路上的。如果一个点有多个入度,取价值最小的。#include<bits/stdc++.h>usingnamespacestd;#definefifirst#definesesecond#definempmake_pair#definepbpush_back#definerep(i,a,b)for(inti=(a 查看详情

cf1592eboredbakry(代码片段)

CF1592EBoredBakry题意:给你长度为n的数组a,现在定义一段区间[l,r]为good,如果al&al+1&...&ar>al⊕al+1⊕...⊕ara_l\\&a_l+1\\&...\\&a_r>a_l⊕a_l+1⊕...⊕a_r 查看详情