首页 > 其他分享 >Daimayuan Online Judge 蜗蜗牌

Daimayuan Online Judge 蜗蜗牌

时间:2024-10-13 21:20:11浏览次数:3  
标签:int Daimayuan 蜗牌 cards second Judge 点数 sum first

一副扑克牌中有 1313 种不同点数的牌,我们用 A,2,3,4,5,6,7,8,9,T,J,Q,K 分别表示点数 11 到 1313。每种点数都有四张不同花色的牌,我们用 S,H,C,D 分别表示四种不同的花色。

蜗蜗发明了一种名为 蜗蜗牌 的牌型:若三张扑克牌的花色均不相同,且它们的点数之和为质数,则称这三张牌的组合为一个 蜗蜗牌

现从两副扑克牌(共 104104 张)中取出 nn 张牌,它们的编号分别为 1,2,...,n1,2,...,n,蜗蜗想知道从这 nn 张牌中取出三张牌能组成一个 蜗蜗牌 的方案有多少种。取的三张牌的编号集合不同即视为不同的方案。

输入格式

第一行输入一个整数 nn,表示有多少张牌。

接下来 nn 行,每行输入两个字符,表示一张牌。第一个字符是 S,H,C,D 中的一个,表示牌的花色。第二个字符是 A,2,3,4,5,6,7,8,9,T,J,Q,K 中的一个,表示牌的点数。

输出格式

输出一个整数,表示有多少种方案。

样例输入1
4
SA
SA
H9
CK
样例输出1
2
样例输入2
10
C5
H2
CQ
ST
DQ
S6
D4
D6
S8
D5
样例输出2
14
数据范围

对于 100%100% 的数据,保证 3≤n≤1043≤n≤104。

 

#include <iostream>
#include <vector>
#include <unordered_set>
#include <algorithm>

using namespace std;

// 判断一个数是否为质数
bool isPrime(int num) {
    if (num < 2) return false;
    for (int i = 2; i * i <= num; ++i) {
        if (num % i == 0) return false;
    }
    return true;
}

int main() {
    int n;
    cin >> n;  // 输入牌的数量
    vector<pair<char, char>> cards(n);  // 存储牌的花色和点数

    for (int i = 0; i < n; ++i) {
        cin >> cards[i].first >> cards[i].second;  // 输入每张牌
    }

    int count = 0;  // 计数符合条件的组合

    // 三重循环生成所有组合
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j < n; ++j) {
            for (int k = j + 1; k < n; ++k) {
                // 确保花色不同
                if (cards[i].first != cards[j].first && 
                    cards[i].first != cards[k].first && 
                    cards[j].first != cards[k].first) {
                    
                    // 计算点数之和
                    int sum = 0;
                    sum += (cards[i].second == 'A') ? 1 : 
                            (cards[i].second == 'T') ? 10 : 
                            (cards[i].second == 'J') ? 11 : 
                            (cards[i].second == 'Q') ? 12 : 
                            (cards[i].second == 'K') ? 13 : 
                            (cards[i].second - '0');

                    sum += (cards[j].second == 'A') ? 1 : 
                            (cards[j].second == 'T') ? 10 : 
                            (cards[j].second == 'J') ? 11 : 
                            (cards[j].second == 'Q') ? 12 : 
                            (cards[j].second == 'K') ? 13 : 
                            (cards[j].second - '0');

                    sum += (cards[k].second == 'A') ? 1 : 
                            (cards[k].second == 'T') ? 10 : 
                            (cards[k].second == 'J') ? 11 : 
                            (cards[k].second == 'Q') ? 12 : 
                            (cards[k].second == 'K') ? 13 : 
                            (cards[k].second - '0');

                    // 检查点数之和是否为质数
                    if (isPrime(sum)) {
                        count++;  // 计数加一
                    }
                }
            }
        }
    }

    cout << count << endl;  // 输出符合条件的组合数量
    return 0;
}
 

标签:int,Daimayuan,蜗牌,cards,second,Judge,点数,sum,first
From: https://blog.csdn.net/weixin_51110569/article/details/142904258

相关文章

  • Daimayuan Online Judge F. 栈!
    题目描述你需要实现一个栈,支持以下两种操作:1、插入一个整数 xx;2、删除栈顶的前 kk 个数字并在一行中按出栈顺序输出被删除的数字,数字之间以空格分隔(若删除前栈中元素不足 kk 个,则不进行删除操作,输出 -1)。初始时栈为空,现在给你 nn 个操作指令,请你按照要求输出答案。......
  • 2024/10/2 CSP-S daimayuan模拟赛复盘
    2024/10/2CSP-Sdaimayuancontestlink(Day7)A.序列题面描述给你一个序列\(r_1,r_2,\dots,r_n\),问有多少非负整数序列\(x_1,x_2,\dots,x_n\)满足:对于所有\(i\),\(0\leqx_i\leqr_i\)。满足\(x_1|x_2|…|x_n=x_1+x_2+⋯+x_n\),左边为二进制或。输出答案对......
  • dp题单vjudge 8.17
    HDU-1024MaxSumPlusPlushttps://acm.hdu.edu.cn/showproblem.php?pid=1024可以想到用dp过,但是无论时间和空间都不够,然后就不会了https://www.cnblogs.com/wuwangchuxin0924/p/6546901.html先写出转移方程,然后发现如果把其中一部分用其他的东西储存起来,就不需要重复寻找,直......
  • OpenJudge | 文字排版
    总时间限制:1000ms内存限制:65536kB描述给一段英文短文,单词之间以空格分隔(每个单词包括其前后紧邻的标点符号)。请将短文重新排版,要求如下:每行不超过80个字符;每个单词居于同一行上;在同一行的单词之间以一个空格分隔;行首和行尾都没有空格。输入第一行是一个整数n,表示......
  • OpenJudge | 扩号匹配问题
    总时间限制:1000ms内存限制:65536kB描述在某个字符串(长度不超过100)中有左括号、右括号和大小写字母;规定(与常见的算数式子一样)任何一个左括号都从内到外与在它右边且距离最近的右括号匹配。写一个程序,找到无法匹配的左括号和右括号,输出原来字符串,并在下一行标出不能匹配......
  • OpenJudge | 点评赛车
    总时间限制:1000ms内存限制:65536kB描述4名专家对4款赛车进行评论1)A说:2号赛车是最好的;2)B说:4号赛车是最好的;3)C说:3号赛车不是最好的;4)D说:B说错了。事实上只有1款赛车最佳,且只有1名专家说对了,其他3人都说错了。请编程输出最佳车的车号,以及说对的专家。输入无输入......
  • [AIZU ONLINE JUDGE] 计算几何 CGL_3_C (射线法判断一点是否在多边形内部)
    Polygon-Point-ContainmentForagivenpolygon g andtargetpoints t,print"2"if g contains t,"1"if t isonasegmentof g,"0"otherwise.g isrepresentedbyasequenceofpoints p1, p2,..., pn wherelinesegmentsconnec......
  • OpenJudge | 矩阵交换行
    总时间限制:1000ms内存限制:65536kB描述编写一个函数,输入参数是55的二维数组,和n,m两个行下标。功能:判断n,m是否在数组范围内,如果不在,则返回0;如果在范围内,则将n行和m行交换,并返回1。在main函数中,生成一个55的矩阵,输入矩阵数据,并输入n,m的值。调用前面的函数。如果返回值......
  • OpenJudge | 最高的分数
    目录描述输入输出样例输入样例输出思路方法一方法二CodeCC++总时间限制:1000ms内存限制:65536kB描述孙老师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最高分数。因为人数比较多,他觉得这件事情交给计算机来做比较方便。你能帮孙老师解决......
  • [题解]AT_arc079_c [ARC079E] Decrease (Judge ver
    思路首先,对于每一次操作,我们可以先找到最大值,然后对其操作。这样,我们可以得到单次操作时间复杂度\(\Theta(n)\)的代码,因为\(n\)很小,所以这道题时间复杂度的瓶颈在于操作的数量。那么,我们想到每一次找到最大值时,直接将其减到小于\(n\)。但是这样可能有一种问题,就是最大值......