bool isLeapYear(int year) {
    return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}

// 计算某年某月某日是该年的第几天
int dayOfYear(int year, int month, int day) {
    static int daysInMonth[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    if (isLeapYear(year)) daysInMonth[2] = 29;
    int dayOfYear = 0;
    for (int i = 1; i < month; ++i) {
        dayOfYear += daysInMonth[i];
    }
    dayOfYear += day;
    return dayOfYear;
}

// 计算两个日期之间相差的天数
int daysBetween(int year1, int month1, int day1, int year2, int month2, int day2) {
    int days = 0;
    if (year1 == year2) {
        return dayOfYear(year2, month2, day2) - dayOfYear(year1, month1, day1);
    }
    days += 365 - dayOfYear(year1, month1, day1) + (isLeapYear(year1) ? 1 : 0);
    for (int year = year1 + 1; year < year2; ++year) {
        days += 365 + (isLeapYear(year) ? 1 : 0);
    }
    days += dayOfYear(year2, month2, day2);
    return days;
}

// 计算两个日期之间相差的分钟数
int minutesBetween(int year1, int month1, int day1, int hour1, int minute1,
                   int year2, int month2, int day2, int hour2, int minute2) {
    int days = daysBetween(year1, month1, day1, year2, month2, day2);
    int minutes = days * 24 * 60;
    minutes += (hour2 - hour1) * 60 + (minute2 - minute1);
    return minutes;
}