cpp_library

This documentation is automatically generated by online-judge-tools/verification-helper

This project is maintained by tsutaj

:warning: etc/etc_000_date.cpp

Code

// よく使う配列

string dayname[] = {"日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"};
string dayname[] = {"日", "月", "火", "水", "木", "金", "土"};
string dayname[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
string dayname[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

int daynum[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

// 年月日の情報から曜日を求める (ツェラーの公式、 Zeller's congruence)

int dayOfTheWeek( int y, int m, int d ) {
    if( m < 3 ) {
        y--; m += 12;
    }
    return ( y + y/4 - y/100 + y/400 + ( 13*m + 8 )/5 + d ) % 7;
}

// 備考 ... 数字と曜日の関係一覧

// 0 ... 日曜日

// 1 ... 月曜日

// 2 ... 火曜日

// 3 ... 水曜日

// 4 ... 木曜日

// 5 ... 金曜日

// 6 ... 土曜日


// うるう年であるかどうかを判定する (Verified: ARC002 A問題)

bool isLeapYear( int y ) {
    if     (y % 400 == 0) return true;
    else if(y % 100 == 0) return false;
    else if(y % 4   == 0) return true;
    else                  return false;
}

// 1日ずつ全探索する (Verified: ARC002 B問題)

// 注意: 配列 daynum と 関数 isLeapYear が必要です

void BForceDate(int y, int m, int d) {
    if(処理を実行) return;
    
    if(d >= daynum[m-1]) {
        if(m == 12) BForceDate(y+1, 1, 1);
        else if(m == 2) {
            if(isLeapYear(y) && d == 28) BForceDate(y, m, d+1);
            else BForceDate(y, m+1, 1);
        }
        else BForceDate(y, m+1, 1);
    }
    else BForceDate(y, m, d+1);
}
#line 1 "etc/etc_000_date.cpp"
// よく使う配列

string dayname[] = {"日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日"};
string dayname[] = {"日", "月", "火", "水", "木", "金", "土"};
string dayname[] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
string dayname[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};

int daynum[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

// 年月日の情報から曜日を求める (ツェラーの公式、 Zeller's congruence)

int dayOfTheWeek( int y, int m, int d ) {
    if( m < 3 ) {
        y--; m += 12;
    }
    return ( y + y/4 - y/100 + y/400 + ( 13*m + 8 )/5 + d ) % 7;
}

// 備考 ... 数字と曜日の関係一覧

// 0 ... 日曜日

// 1 ... 月曜日

// 2 ... 火曜日

// 3 ... 水曜日

// 4 ... 木曜日

// 5 ... 金曜日

// 6 ... 土曜日


// うるう年であるかどうかを判定する (Verified: ARC002 A問題)

bool isLeapYear( int y ) {
    if     (y % 400 == 0) return true;
    else if(y % 100 == 0) return false;
    else if(y % 4   == 0) return true;
    else                  return false;
}

// 1日ずつ全探索する (Verified: ARC002 B問題)

// 注意: 配列 daynum と 関数 isLeapYear が必要です

void BForceDate(int y, int m, int d) {
    if(処理を実行) return;
    
    if(d >= daynum[m-1]) {
        if(m == 12) BForceDate(y+1, 1, 1);
        else if(m == 2) {
            if(isLeapYear(y) && d == 28) BForceDate(y, m, d+1);
            else BForceDate(y, m+1, 1);
        }
        else BForceDate(y, m+1, 1);
    }
    else BForceDate(y, m, d+1);
}
Back to top page