Skip to the content.

:heavy_check_mark: test/yukicoder/2109.test.cpp

Depends on

Code

#define PROBLEM "https://yukicoder.me/problems/no/2109"
#include <bits/stdc++.h>

#include "library/datetime/DateTime.hpp"

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int m, d, k;
    std::cin >> m >> d >> k;

    DateTime now(1, m, d);
    std::set<char> se;
    for (int i = 0; i < 7; i++, now++) {
        std::string s = now.to_string();
        for (int i = 5; i < s.size(); i++)
            se.insert(s[i]);
    }
    std::cout << (se.size() <= k ? "No\n" : "Yes\n");
}
#line 1 "test/yukicoder/2109.test.cpp"
#define PROBLEM "https://yukicoder.me/problems/no/2109"
#include <bits/stdc++.h>

#line 1 "library/datetime/DateTime.hpp"
class DateTime {
    static int day_of_week; // 1年1月1日の曜日
  public:
    int year, month, day;
    DateTime(int y, int m, int d) : year(y), month(m), day(d) {}

    static bool is_leap_year(int y) {
        return !(y % 400) or (!(y % 4) and y % 100);
    }
    static int month_days(int y, int m) {
        if (m == 2)
            return 28 + is_leap_year(y);
        return 31 - (m == 4 || m == 6 || m == 9 || m == 11);
    }

    // 1年1月1日が 0 となるように変換
    int to_int() const {
        int y = (month <= 2 ? year - 1 : year);
        int m = (month <= 2 ? month + 12 : month);
        int d = day;
        return 365 * y + y / 4 - y / 100 + y / 400 + 306 * (m + 1) / 10 + d -
               429;
    }

    // to_int() の逆関数
    static DateTime from_int(int x) {
        int y = x * 400 / 146097 + 1;
        int d = x - DateTime(y, 1, 1).to_int();
        int m = 1;
        while (d >= 28) {
            int k = month_days(y, m);
            if (d < k)
                break;
            ++m;
            d -= k;
        }
        if (m == 13) {
            ++y;
            m = 1;
        }
        ++d;
        return DateTime(y, m, d);
    }

    void set_day_of_week(int day_of_week_) {
        int now = to_int() % 7;
        day_of_week = day_of_week_ - now;
        if (day_of_week < 0)
            day_of_week += 7;
    }

    int weekday() const { return (day_of_week + to_int()) % 7; }

    DateTime &operator++() {
        if (++day > month_days(year, month)) {
            day = 1;
            if (++month > 12) {
                ++year;
                month = 1;
            }
        }
        return *this;
    }
    DateTime &operator++(int) { return ++(*this); }
    DateTime &operator--() {
        if (--day < 0) {
            if (--month < 0) {
                assert(--year >= 1);
                month = 12;
            }
            day = month_days(year, month);
        }
        return *this;
    }
    DateTime &operator--(int) { return --(*this); }
    DateTime &operator+=(int d) {
        year += (d / 400) * 146097;
        d %= 400;
        while (d--)
            (*this)++;
        return *this;
    }
    DateTime &operator-=(int d) {
        year -= (d / 400) * 146097;
        d %= 400;
        while (d--)
            (*this)--;
        return *this;
    }
    DateTime operator+(int d) { return DateTime(year, month, day) += d; }
    DateTime operator-(int d) { return DateTime(year, month, day) -= d; }

    // yyyy[sep]mm[sep]dd
    std::string to_string(std::string sep = "-") {
        std::string y = std::to_string(year);
        std::string m = std::to_string(month);
        std::string d = std::to_string(day);
        while (y.size() < 4)
            y = "0" + y;
        while (m.size() < 2)
            m = "0" + m;
        while (d.size() < 2)
            d = "0" + d;
        return y + sep + m + sep + d;
    }

    std::tuple<int, int, int> to_tuple() const { return {year, month, day}; }

#define define_cmp(op)                                                         \
    bool operator op(const DateTime &a) const {                                \
        return to_tuple() op a.to_tuple();                                     \
    }
    define_cmp(==) define_cmp(!=) define_cmp(<) define_cmp(>) define_cmp(<=)
        define_cmp(>=)
#undef define_cmp
};
#line 5 "test/yukicoder/2109.test.cpp"

int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);

    int m, d, k;
    std::cin >> m >> d >> k;

    DateTime now(1, m, d);
    std::set<char> se;
    for (int i = 0; i < 7; i++, now++) {
        std::string s = now.to_string();
        for (int i = 5; i < s.size(); i++)
            se.insert(s[i]);
    }
    std::cout << (se.size() <= k ? "No\n" : "Yes\n");
}
Back to top page