[AOJ] 1179 Millennium

 · 1 min read

AOJの1179、Millenniumをc++で解きました。

日付の計算の問題が苦手で、
結構グダグダになりました。

うるう年と平年の月ごとの経過日数をハードコーディングして、
月をindexとしてそのまま取れるようオフセットして経過日数を撮りました。

後はうるう年(i%3==0)判定をすればOK。

問題文はこちら

コード

#include <iostream>
#include <string>
#define REP(i, n) for ( int i = 0; i < n; i++ )
using namespace std;
int month[] = {0, 0, 20, 39, 59, 78, 98, 117, 137, 156, 176, 195, 215, 234 };
int year(int y) {
int sum = 0;
for ( int i = 1; i < y; i++ ) {
if ( i%3 == 0 ) sum += 200;
else sum += 195;
}
return sum;
}
int getdate(int y, int m, int d) {
return year(y) + (y%3==0? (m-1)*20 : month[m]) + d;
}
int main() {
int n, y, m, d;
int today = getdate(1000, 1, 1);
// int _today = _old(1000, 1, 1);
cin >> n;
while(n--) {
int sub = 0;
cin >> y >> m >> d;
sub = today - getdate(y, m, d);
cout << sub << endl;
}
return 0;
}
view raw AOJ_1179.cpp hosted with ❤ by GitHub
AOJC++
© 2012-2025 Leko