1157 Anniversary + 堆 + 自定义结构体排序

PAT题目链接https://pintia.cn/problem-sets/994805342720868352/exam/problems/1478634991737962496

题解代码

#include<iostream>
#include<vector>
#include<string>
#include<set>
#include<unordered_map>
using namespace std;
#define MAX_N 100000

struct node {
    string id;
    int y, m, d;
    node (string id, int y, int m, int d) : id(id), y(y), m(m), d(d) {}
    // 年纪最大的排最前面
    bool operator < (const node &a) const {
        return (y != a.y) ? y < a.y : (m != a.m ? m < a.m : d < a.d);
    }
};
int cnt;
set<node> s, all;
vector<node> v;
unordered_map<string, int> M;

void extact(string id) {
    int year = stoi(id.substr(7,4));
    int month = stoi(id.substr(11,2));
    int day = stoi(id.substr(13,2));
    M[id] = cnt++;
    v.push_back(node(id, year, month, day));
    all.insert(v[M[id]]);
}

int main() {
    int n, m;
    string id;
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> id;
        extact(id);
    }
    cin >> m;
    for (int i = 0 ; i < m; i++) {
        cin >> id;
        if (M.find(id) != M.end()) {
            s.insert(v[M[id]]);
        } else {
            extact(id);
        }
    }
    if (s.size()) {
        cout << s.size() << endl;
        cout << s.begin()->id << endl;
    } else {
        cout << 0 << endl;
        cout << all.begin()->id << endl;
    }
    return 0; 
}
posted @ 2023-05-03 18:06  江韵阁  阅读(11)  评论(0)    收藏  举报