AHdark
一个多语种开发蒟蒻
AHdark Blog

2021海淀区中小学生信息奥赛-普及组 分析

由于长时间写PHP、JavaScript等其他语言的原因,第二题、第三题的模拟与动态规划算法过于恶心直接放弃了

第一题 Card

#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
/**
 * @author AHdark
 * @date 20210515
*/

int hasharr[4][13]; //Hash Array
int t[4];//Time Find Array

/**
 * @name 卡牌
 * @param color char 颜色
 * @param number int 数字
 * @param color_number int 颜色代号
*/
class card
{
    public:
        char color; //颜色
        int number; //数字
        int color_number; //颜色代号
        
        void get_color()
        {
            /**
             *  @name 颜色代号对应
             *  P -> 0
             *  K -> 1
             *  H -> 2
             *  T -> 3
             */
            if(this->color=='p'||this->color=='P')
                this->color_number = 0;
            else if(this->color=='k'||this->color=='K')
                this->color_number = 1;
            else if(this->color=='h'||this->color=='H')
                this->color_number = 2;
            else if(this->color=='t'||this->color=='T')
                this->color_number = 3;
            //Test: cout << this->color << '>' << this->color_number << endl;
        }
} a[500];

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

    //Code Start

    //input
    int i=0;
    while(cin>>a[i].color>>a[i].number)
    {
        a[i].get_color();
        if (hasharr[a[i].color_number][a[i].number] == 0)
        {
            t[a[i].color_number]++;
            hasharr[a[i].color_number][a[i].number] = 1;
        }
        else
        {
            cout << "ERROR" << endl;
            return 0;
        }
        i++;
    }
    for (int i = 0; i < 4; i++)
    {
        cout << 13 - t[i] << " ";
    }
    cout << endl;

    //Code End
    return 0;
}

使用Class来表示单个卡牌的属性信息,color_number便于分类处理


最初代码35行~42行我使用的是Switch...Case,但一直无法正确识别。最终排查发现,switch必须为以下结构

switch(int value){
    case 1:
        return 0;
        break;
    case 2:
        return 2;
        break:
}

如不加Break,则一律按顺序结构处理


VSCode 编译有个小坑,代码中我使用freopen控制输入输出,按Dev C++编译方法应将.in.out文件放在.cpp文件目录下。但VSCode由于可以设定项目文件夹,会自动以项目文件夹为根目录识别相对路径。

因此,如你设定工作目录为 /home/ahdark/c++,但文件位于/home/ahdark/c++/object,此时你的文件读取默认目录应在/home/ahdark/c++

赞赏
本文链接:https://ahdark.com/technology/116.shtml
本文采用 CC BY-NC-SA 3.0 Unported 协议进行许可
欢迎加入Q群交流:654022768

AH Dark

文章作者

本博客的运营者、主要开发者、主要作者 深度学习算法工程师,后端工程师,嵌入式软件开发工程师 Azure认证 运维工程师

发表评论

textsms
account_circle
email

  • 曾经试着搞过信息学奥赛,学了几天实在受不了太难了。 :grin:

    1月前 回复

AHdark Blog

2021海淀区中小学生信息奥赛-普及组 分析
由于长时间写PHP、JavaScript等其他语言的原因,第二题、第三题的模拟与动态规划算法过于恶心直接放弃了 第一题 Card #include<iostream> #include<cstdio> #include&l…
扫描二维码继续阅读
2021-05-15