10.13 1.0考试 第三题 七十和十七 题解
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.13 1.0考试 第三题 七十和十七 题解相关的知识,希望对你有一定的参考价值。
这道题太尴尬了……
当时打完第二题暴力一看还有两个多小时,开心的要死要死的,结果乐极生悲,在第二题调了太长时间,到这题就剩半个多小时了……
看到输出C没反应过来,但是直觉告诉我和逆元有关,然后就发现答案就是a/b在模意义下的结果,然后也没时间想正解了,先打了个暴力上去,死调不出来。考完后才知道我们每将一个数提到开头,我们就要去重新扫一遍……SB出题人没说清楚啊!当时估摸也是太紧张了,忘了去试一下。
正解是这样的:我们设f[i]为E的分子,那么转移如下:
f[i]=f[i-1]+f[i-1]+2^0*jc[i-1]+f[i-1]+2^1*jc[i-1]+^+f[i-1]+2^i-1*jc[i-1].其中jc为阶乘。
2^x就是我们把数x+1放在最后一位比f[i-1]增加的方案数。jc[i-1]就是刨去x后有多少排列方式。
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <cstring> 5 #include <queue> 6 #include <algorithm> 7 #include <cmath> 8 #include <map> 9 #define N 100005 10 using namespace std; 11 int n,p=1000000007; 12 long long exgcd(long long a,long long b,long long c) 13 { 14 if(!a)return -1; 15 if(c%a==0)return c/a; 16 long long t=exgcd(b%a,a,(((-c%a)+a)%a)); 17 if(t==-1)return t; 18 return (t*b+c)/a; 19 } 20 long long jc[N],xp[N],f[N]; 21 int main() 22 { 23 scanf("%d",&n); 24 xp[0]=1; 25 for(int i=1;i<=N-2;i++)xp[i]=(xp[i-1]*2)%p; 26 jc[0]=1; 27 for(int i=1;i<=N-2;i++)jc[i]=(jc[i-1]*i)%p; 28 f[1]=0; 29 for(int i=2;i<=n;i++) 30 { 31 f[i]=((i*f[i-1])%p+((xp[i-1]-1)*jc[i-1]%p))%p; 32 } 33 printf("%lld\\n",f[n]*exgcd(jc[n],p,1)%p); 34 return 0; 35 }
以上是关于10.13 1.0考试 第三题 七十和十七 题解的主要内容,如果未能解决你的问题,请参考以下文章
全国计算机等级考试二级Python(2021年9月)备考笔记 第十二天
bzoj 2752 9.20考试第三题 高速公路(road)题解