赞
踩
特斯拉公司的六位密码被轻松破解后,引发了人们对电动车的安全性能的怀疑。李华听闻后,自己设计了一套密码:
现在给出 n , a , b n,a,b n,a,b,求可能的不同储存方案的个数。
第一行:共 3 3 3 个整数, n , a , b n,a,b n,a,b。
第一行:一个整数,表示方案个数。
2 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> using namespace std; typedef __int128_t U128; template <typename T> inline void write(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; } int main() { int n, a, b; cin >> n >> a >> b; write(bino(a + n, n) * bino(b + n, n)); return 0; }
100分(没有AC)的C++语言程序如下:
/* P2638 安全系统 */ #include <iostream> using namespace std; typedef unsigned long long 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; } int main() { int n, a, b; cin >> n >> a >> b; cout << bino(a + n, n) * bino(b + n, n); return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。