安全系统
题目描述
特斯拉公司的六位密码被轻松破解后,引发了人们对电动车的安全性能的怀疑。李华听闻后,自己设计了一套密码:
- 假设安全系统中有 n n n 个储存区,每个储存区最多能存储存 2 2 2 个种类不同的信号(可以不储存任何信号)。有 0 0 0 和 1 1 1 这两种信号,其中 0 0 0 有 a a a 个, 1 1 1 有 b b b 个,单独一个 0 0 0 或 1 1 1 算一个信号。现要将这些信号储存在储存区中, 0 0 0 和 1 1 1可以不用全部储存,一个存储区可以存放任意多个 0 0 0 和任意多个 1 1 1。一种不同的储存方案经过李华处理后就将是一串不同的密码。
现在给出
n
,
a
,
b
n,a,b
n,a,b,求可能的不同储存方案的个数。
输入格式
第一行:共
3
3
3 个整数,
n
,
a
,
b
n,a,b
n,a,b。
输出格式
第一行:一个整数,表示方案个数。
样例 #1
样例输入 #1
2 1 1
样例输出 #1
9
提示
所有
9
9
9 种方案如下:
储存区
1
1
1储存区
2
2
2
NULL
\verb!NULL!
NULL
NULL
\verb!NULL!
NULL
0
0
0
NULL
\verb!NULL!
NULL
1
1
1
NULL
\verb!NULL!
NULL
NULL
\verb!NULL!
NULL
0
0
0
NULL
\verb!NULL!
NULL
1
1
1
0
,
1
0,1
0,1
NULL
\verb!NULL!
NULL
NULL
\verb!NULL!
NULL
0
,
1
0,1
0,1
1
1
1
0
0
0
0
0
0
1
1
1
对于全部数据,
a
,
b
≤
50
a,b\le 50
a,b≤50,
n
+
a
≤
50
n+a\le 50
n+a≤50,
n
+
b
≤
50
n+b\le 50
n+b≤50。
upd 2022.10.22
\text{upd 2022.10.22}
upd 2022.10.22:新增加一组 Hack 数据。
问题链接: P2638 安全系统
问题分析: 数学问题。用64位无符号整数来计算,虽然得100分,对于新增加一组 Hack 数据,没有通过。用128位整数来计算可以AC。
参考链接: (略)
题记: (略)
AC的C++语言程序如下:
/* P2638 安全系统 */#include<iostream>#include<cstdio>usingnamespace std;typedef __int128_t U128;template<typenameT>inlinevoidwrite(T x){if(x <0){
x =~(x -1);putchar('-');}if(x >=10)write(x /10);putchar(x %10+'0');}// 计算二项式
U128 bino(int n,int r){
U128 ans =1;for(int i =1; i <= r; i++)
ans *= n - i +1, ans /= i;return ans;}intmain(){int n, a, b;
cin >> n >> a >> b;write(bino(a + n, n)*bino(b + n, n));return0;}
100分(没有AC)的C++语言程序如下:
/* P2638 安全系统 */#include<iostream>usingnamespace std;typedefunsignedlonglong ULL;// 计算二项式
ULL bino(int n,int r){
ULL ans =1;for(int i =1; i <= r; i++)
ans *= n - i +1, ans /= i;return ans;}intmain(){int n, a, b;
cin >> n >> a >> b;
cout <<bino(a + n, n)*bino(b + n, n);return0;}
版权归原作者 海岛Blog 所有, 如有侵权,请联系我们删除。