Codevs 1697 ⑨要写信

2023-12-25 16:32
文章标签 codevs 写信 1697

本文主要是介绍Codevs 1697 ⑨要写信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1697 ⑨要写信
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
传送门
题目描述 Description
琪露诺(冰之妖精)有操控冷气的能力。能瞬间冻结小东西,比普通的妖精更危险。一直在释放冷气的她周围总是非常寒冷。
由于以下三点原因……
琪露诺的符卡 冰符“Icicle Fall”-Easy的弹幕有够蠢的,只要站在她的正前方就没任何弹幕会碰到你;
ZUN在《红魔乡》中介绍她时已经说她有点笨笨的了;
在ZUN放出《东方花映冢》的介绍图时,在图中把琪露诺放在了⑨的位置上,并以“⑨笨蛋”简单带过,从此“⑨”及“笨蛋”就成为她的别名了……
所以琪露诺便得到了“笨蛋”的别称。
某日,琪露诺又2了……
她写了N封信要装到N个信封里面,却全都装错了……现在想知道有多少种装错的可能性。
输入描述 Input Description
信和信封的数量N。
输出描述 Output Description
装错的可能性的数量。
样例输入 Sample Input
输入样例1
2
输入样例2
4
样例输出 Sample Output
输出样例1
1
输出样例2
9
数据范围及提示 Data Size & Hint
1≤N≤100
分类标签 Tags
动态规划 序列型DP 高精度 数学相关

/*
高精度+错排公式.
错排公式可以自己搞出来.
递推:
有n封信,第i封信装错的话有i-1种可能,
设i-1其中一个为k,那么k有两种装法:
(1):装到第i个信封里,此时剩下的i-2封信要装到i-2个信封里,就有f[i-2];
(2):装到除i之外的信封里,这时i-1的作用和i一样,剩下的就有f[i-1]; 
so f[i]=(i-1)*(f[i-1]+f[i-2]) .
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#define MAXN 201
#define MAXM 1001
using namespace std;
int f[MAXN][MAXM],n,tmp[MAXM],t[MAXM];
int read()
{int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();return x*f;
}
void slove(int x)
{memset(t,0,sizeof t);while(x) t[++t[0]]=x%10,x/=10;return ;
}
void add(int c[],int a[],int b[])
{c[0]=a[0]+b[0];for(int i=1;i<=c[0];i++){c[i]+=a[i]+b[i];c[i+1]+=c[i]/10;c[i]%=10;}if(c[c[0]+1]) c[0]++;while(!c[c[0]]&&c[0]>1) c[0]--;return;
}
void mul(int c[],int a[],int b[])
{c[0]=a[0]+b[0];for(int i=1;i<=a[0];i++){int x=0;for(int j=1;j<=b[0];j++){c[i+j-1]+=a[i]*b[j];c[i+j]+=c[i+j-1]/10;x=c[i+j-1]/10;c[i+j-1]%=10;}c[i+b[0]]=x;}while(!c[c[0]]&&c[0]>1) c[0]--;return;
}
int main()
{n=read();if(n==0){printf("1");return 0;}f[1][0]=1,f[1][1]=0;f[2][0]=1,f[2][1]=1;for(int i=3;i<=n;i++){memset(tmp,0,sizeof tmp);add(tmp,f[i-1],f[i-2]);slove(i-1);mul(f[i],t,tmp);}for(int i=f[n][0];i>=1;i--) printf("%d",f[n][i]);return 0;
}

这篇关于Codevs 1697 ⑨要写信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/536171

相关文章

马云写信与员工沟通阿里未来战略:从IT到DT时代

2月28日,马云给全体员工发出邮件,和员工分享了其和管理团队对移动互联网带来的改变的一些思考和想法。在邮件中其提出移动电商将必定是移动互联网时代最重要的领域,而云端(Cloud +App)将是未来移动互联网的关键,阿里巴巴将全面从云打到端,ALL IN移动电商。   马云说,从五年前确定“开放数据平台”为集团战略目标起,阿里巴巴一直在重兵布局云(云计算和大数据)。通过这一积累,目前拥有“

codevs 1028 花店橱窗布置 最小费用最大流

花与花瓶连边,容量为1,费用为对应费用,s向花连边,容量为1,费用为0,花瓶向t连边,容量为1,费用为0。这里要求最大费用,把费用设为相反数,结果也取相反数。 #include<iostream>#include<cstring>#include<cstdio>#include<queue>#define inf 1000000000using namespace std;int

codevs 1074食物链 并查集

a和b之间有三种关系,a和b同类,a吃b,b吃a,用a+n表示a吃的,a+2*n表示吃a的。与关押犯人一样,但这里要影射出2种虚拟的才足以表示出关系。 #include<cstdio>#include<iostream>using namespace std;int n,k,d,x,y;int fa[200000];int find(int x){return x==fa[x]?

xth 砍树(codevs 1369)

题目描述  Description 在一个凉爽的夏夜,xth 和 rabbit 来到花园里砍树。为啥米要砍树呢?是这样滴,小菜儿的儿子窄森要出生了。Xth这个做伯伯的自然要做点什么。于是他决定带着rabbit 去收集一些木材,给窄森做一个婴儿车……(xth 早就梦想着要天天打菜儿他儿窄森的小 pp,到时候在婴儿车里安装一个电子遥控手臂,轻轻一按,啪啪啪……“乌卡卡——”xth 邪恶滴笑了,

Codevs P1036 商务旅行

Codevs P1036 商务旅行 题目描述 Description 某首都城市的商人要经常到各城镇去做生意,他们按自己的路线去做,目的是为了更好的节约时间。 假设有N个城镇,首都编号为1,商人从首都出发,其他各城镇之间都有道路连接,任意两个城镇之间如果有直连道路,在他们之间行驶需要花费单位时间。该国公路网络发达,从首都出发能到达任意一个城镇,并且公路网络不会存在环。 你的任务是帮助该

数的划分 CODEVS - 1039

http://codevs.cn/problem/1039/ 参考博客https://blog.csdn.net/qq_37321281/article/details/74531143   #include <stdio.h>int main(){int e[201][7];int n,k,i,j;while(scanf("%d%d",&n,&k)!=EOF){for(i=0;i<=n;

SSL 1026 VIJOS 1126 洛谷 1034 CODEVS 1101 矩形覆盖#区间dp#

题目 用 k 个矩形覆盖所有点,矩形的边平行于坐标轴。问题是当 n 个点坐标和 k 给出后,使得覆盖所有点的 k 个矩形的面积之和为最小。约定:覆盖一个点的矩形面积为 0;覆盖平行于坐标轴直线上点的矩形面积也为0。各个矩形必须完全分开(边线与顶点也都不能重合)。 分析 可以用dp,先离散。 f [ i ] [ j ] [ i 1 ] f[i][j][i1] f[i][j][i1]表示覆

#单调队列#洛谷 1090 SSL 1040 VIJOS 1097 CODEVS 1063 合并果子

题目及O( n l o g 2 n nlog_2n nlog2​n)做法 分析 其实我们也可以用O(n)来做,首先来个桶排。 再用一个单调队列存下两个最小值,不断更新。 代码 #include <cstdio>#include <cctype>using namespace std;short t[20001],l,r,min[2],n,head; int a[30001],

#离散# VIJOS 1237 CODEVS 2765 隐形的翅膀

题目 选出两只最小的翅膀,使长度比接近黄金比例。 分析 我们可以把每一只翅膀都乘上黄金比例,然后快排找出最接近的。 代码 #include <cstdio>#include <cctype>#include <algorithm>#define gs 0.6180339887498949using namespace std;double a[60001]; int n

#乘法逆元,组合计数#洛谷 1313 codevs 1137 jzoj 3027 计算系数

题目 给定一个多项式$ (ax + by)^k$ ,请求出多项式展开后 $xnym $项的系数。 分析 根据二项式定理,有 ( a x + b y ) k = ∑ i = 0 k C k i a i b k − i x i y k − i (ax+by)^k=\sum_{i=0}^kC_k^ia^ib^{k-i}x^iy^{k-i} (ax+by)k=i=0∑k​Cki​aibk−ixi