Yuki 87 Advent Calendar Problem ( Periodic )
No.87 Advent Calendar Problem - yukicoder
閏年じゃない場合は 365 日で、365 % 7 = 1 日だけ、前の年の同じ日に対応する曜日がずれる ( 増える )。閏年だと 2 日ずれ、循環する周期を探す意味で計算してみると、その周期は 400 年だと分かる。
#include <bits/stdc++.h> using namespace std; typedef long long ll; int uru( int x ){ if( x % 400 == 0 ) return 1; if( x % 100 == 0 ) return 0; return x % 4 == 0; } signed main(){ ll N; cin >> N; ll ans = 0; for( int i = 1, z = 0; i <= 400; ++i ) ( z += 365 + uru( 2014 + i ) ) %= 7, ans += z == 0; ans *= ( N - 2014 ) / 400; for( int i = 1, z = 0; i <= ( N - 2014 ) % 400; ++i ) ( z += 365 + uru( 2014 + i ) ) %= 7, ans += z == 0; cout << ans << endl; return 0; }