Олимпиадная задача на даты

Байтландские психологи по заказу Института преподавания истории провели исследование, определяющее свойства, влияющие на запоминаемость учениками дат исторических событий. Оказалось, что дата является запоминаемой, если номер года строго больше номера месяца, а номер месяца строго больше номера дня. Например, 2016/8/7 и 1917/11/7 — запоминаемые даты, а 3/1/2 и 1945/5/8 — нет.

После чего известный байтландский математик предложил реформу хронологии: все запоминаемые даты новой эры (начиная с 3/2/1) в хронологическом порядке нумеровать последовательными целыми числами, начиная с 1.

Вам требуется найти и вывести k-ю запоминаемую дату. Количество месяцев в году и дней в месяцах, а также правила определения високосного года являются стандартными.

Формат ввода В единственной строке дано число k (1 ≤ k ≤ 10^9) — номер запоминаемой даты.

Формат вывода Выведите k-ую по порядку запоминаемую дату в формате ”year/month/day”. Ведущие нули выводить не надо.

Пример 1

Ввод:

1

Вывод:

3/2/1

Пример 2

Ввод:

42

Вывод:

8/5/1

Подскажите пожалуйста, как решить эту задачу. Я пытался сделать так:

#include <iostream>
#include <string>
#include <algorithm>
#include <cmath>


using namespace std;
int main() {
    int n;
    cin >> n;

    int y = 3;
    while (n >= 0) {
        long long m1 = min(y, 12);
        for (int m = 2; m < m1; m++) {
            for (int d = 1; d < m; d++) {
                n -= 1;
                if (n <= 0) {
                    cout << y << "/" << m << "/" << d;
                    return 0;
                }
            }
        }
        y++;
    }
}

Но программа выдает неверный ответ уже на 4 тесте, подскажите пожалуйста, как исправить. Заранее спасибо


Ответы (0 шт):