TB椰程 TypeBuddy 打字搭子

2024 扑克牌 · 方案二 二维布尔表

CSP-J 标程 · 复赛真题 · 代码 · cpp · 难度 2/5 · 共 930 字

花色和点数各查下标,在表上打标记

  • 2024
  • 模拟

正文

// CSP-J 2024 复赛 T1 · 扑克牌(方案二)
// 原题:https://oj.yecheng.tv/p/ccf-CSPJ2024A
//
// 方案二 · 二维布尔表(不用字符串,也不用 set)
// 花色只有 D、C、H、S 四种,点数只有 A23456789TJQK 十三种,
// 干脆把牌映射到一张 4 行 13 列的表上:见过就把格子标成 true。
// 映射的办法是「在这个字符集里查下标」:string.find(ch) 返回的位置就是编号。
// 最后数一数有多少个格子是 true,答案 = 52 - 格子数。
// 复杂度 O(n),比 set 更轻量,也是竞赛里更常见的写法。

#include <bits/stdc++.h>
using namespace std;

bool seen[4][13];

int main() {
    freopen("poker.in", "r", stdin);
    freopen("poker.out", "w", stdout);

    string suit = "DCHS";
    string rank = "A23456789TJQK";

    int n;
    cin >> n;
    for (int i = 0; i < n; i++) {
        string card;
        cin >> card;
        int s = suit.find(card[0]);
        int r = rank.find(card[1]);
        seen[s][r] = true;
    }

    int kinds = 0;
    for (int s = 0; s < 4; s++) {
        for (int r = 0; r < 13; r++) {
            if (seen[s][r]) kinds++;
        }
    }
    cout << 52 - kinds << "\n";
    return 0;
}

CSP-J 标程 · 复赛真题的其它内容

打字首页 · 词库画廊 · 编程打字 · 指法入门 · 天梯榜 · 数据分析 · 班级课堂 · 关于我们
椰程 TypeBuddy 打字搭子 —— 键盘指法练习 · 单词记忆 · 班级课堂 · 在线 PK