『题解』Codeforces 1743A Password

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;
}
posted @ 2022-11-26 21:28  Clyfort  阅读(58)  评论(0编辑  收藏  举报