結果
問題 | No.87 Advent Calendar Problem |
ユーザー |
![]() |
提出日時 | 2015-09-27 12:51:46 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 2 ms / 5,000 ms |
コード長 | 1,946 bytes |
コンパイル時間 | 527 ms |
コンパイル使用メモリ | 78,092 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-07-19 10:48:18 |
合計ジャッジ時間 | 1,307 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 24 |
ソースコード
#include <iostream>#include <sstream>#include <math.h>#include <vector>#include <array>#include <algorithm>#include <queue>#include <numeric>#include <map>#include <set>#include <bitset>using namespace std;#define int long long#define FOR(i, a, b) for(int i=(a);i<(b);i++)#define RFOR(i, a, b) for(int i=(b-1);i>=(a);i--)#define REP(i, n) for(int i=0; i<(n); i++)#define RREP(i, n) for(int i=(n-1); i>=0; i--)#define ALL(a) (a).begin(),(a).end()#define UNIQUE_SORT(l) sort(ALL(l)); l.erase(unique(ALL(l)), l.end());#define CONTAIN(a, b) find(ALL(a), (b)) != (a).end()#define SUM(a) accumulate(ALL(a), 0)#define array2(type, x, y) array<array<type, y>, x>#define vector2(type) vector<vector<type> >#define out(...) printf(__VA_ARGS__)typedef pair<int, int> pos;int pos::*x = &pos::first;int pos::*y = &pos::second;int dxy[] = {0, 1, 0, -1, 0};/*================================*/int N;// 2014年7月23日(水)bool is_uruu(int n) {if (n % 400 == 0) return true;if (n % 100 == 0) return false;if (n % 4 == 0) return true;return false;}signed main(){cin >> N;// 全部365日だとすると?// 365 % 7 = 1 なので、7年に一度同じ曜日になる// うるう年が一つあると、その年は366%7=2日分だけ動く// うるう年は400年周期で回るので、最初の400年分だけ求めてあとは倍数でいけそう?int diff = N - 2014;int ans = 0;if (diff > 500) {int leap = 0;int cnt = 0; // 400年ごとにcnt回REP(i,400) {leap += is_uruu(2015+i) ? 2 : 1;cnt += (leap % 7 == 0);}ans = (diff / 400) * cnt;diff = diff % 400; // 400年の余りの分}int leap = 0;int cnt = 0;REP(i,diff) {leap += is_uruu(2015+i) ? 2 : 1;cnt += (leap % 7 == 0);}cout << ans + cnt << endl;return 0;}