Problem
现有 \(4\) 位密码,满足以下条件:
- 给定数位的集合 \(S\),密码中没有用到这些数位。
- 密码中恰好包含两个数位,每个数位出现了两次。
求符合条件的密码个数。
Solution
假设 \(S\) 中有 \(n\) 个数,那么就有 \(10 - n\) 个可选。随意从中选取两个,方案数是 \((10 - n)(9 - n) \div 2\)。
再从四个位置中随意选取两个,放置第一种数位,方案数是 \(C_{4}^{2}\) 种。因此答案是 \(3 \times (10 - n)(9 - n)\)。
当然,以本题的数据范围,单纯枚举也完全可以通过。
Code
#include <bits/stdc++.h>
using namespace std;
#define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout);
#define r(x) x = read()
inline int read()
{
int d = 0;
char ch = getchar();
while (ch < '0' || ch > '9')
ch = getchar();
while (ch >= '0' && ch <= '9')
d = (d << 3) + (d << 1) + ch - 48, ch = getchar();
return d;
}
void work()
{
int n;
r(n);
for (int i = 1, x; i <= n; i ++)
cin >> x;
cout << 3 * (10 - n) * (9 - n) << '\n';
}
int main()
{
file("");
int tt = 1;
r(tt);
while (tt --)
work();
return 0;
}
标签:10,ch,int,题解,Codeforces,密码,Password,数位
From: https://www.cnblogs.com/mrCrazyWolf/p/16928355.html