CODE FESTIVAL 2014 予選A C - 2月29日
問題について考えたこと
入力が と非常に大きいことから、ループによる計算はやめました。
AとBのそれぞれの個数を計算して、BからAを引く。その際はAがちょうどうるう年である時に気をつけます。
#define _GIBCXX_DEBUG #include <bits/stdc++.h> using namespace std; #define rep(i, n) for (int i = 0; i < (n); ++i) #define all(v) v.begin(), v.end() using namespace std; using ll = long long; ll solve(ll n) { ll result = 0; result = n / 400 * 97; ll remainder = n % 400; for (ll i = 1; i <= remainder; ++i) { if (i % 4 == 0 && i % 100 != 0) ++result; } return result; } int main(void) { ll A, B; cin >> A >> B; ll a = solve(A); ll b = solve(B); ll ans = b - a; if (A % 4 == 0) { if (A % 400 == 0) { ++ans; } else if (A % 100 != 0) { ++ans; } } cout << ans << endl; return 0; }