結果
問題 | No.721 Die tertia (ディエ・テルツィア) |
ユーザー | okkuukenken |
提出日時 | 2022-06-01 16:01:10 |
言語 | C++23 (gcc 12.3.0 + boost 1.83.0) |
結果 |
AC
|
実行時間 | 2 ms / 2,000 ms |
コード長 | 2,214 bytes |
コンパイル時間 | 737 ms |
コンパイル使用メモリ | 87,444 KB |
実行使用メモリ | 6,944 KB |
最終ジャッジ日時 | 2024-09-21 01:32:31 |
合計ジャッジ時間 | 1,384 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 2 ms
6,812 KB |
testcase_01 | AC | 2 ms
6,940 KB |
testcase_02 | AC | 2 ms
6,944 KB |
testcase_03 | AC | 1 ms
6,944 KB |
testcase_04 | AC | 1 ms
6,940 KB |
testcase_05 | AC | 2 ms
6,940 KB |
testcase_06 | AC | 1 ms
6,944 KB |
testcase_07 | AC | 2 ms
6,940 KB |
testcase_08 | AC | 1 ms
6,944 KB |
testcase_09 | AC | 1 ms
6,940 KB |
testcase_10 | AC | 2 ms
6,940 KB |
testcase_11 | AC | 1 ms
6,940 KB |
testcase_12 | AC | 2 ms
6,940 KB |
testcase_13 | AC | 2 ms
6,940 KB |
testcase_14 | AC | 2 ms
6,944 KB |
testcase_15 | AC | 2 ms
6,944 KB |
testcase_16 | AC | 2 ms
6,944 KB |
testcase_17 | AC | 1 ms
6,940 KB |
testcase_18 | AC | 2 ms
6,944 KB |
testcase_19 | AC | 1 ms
6,940 KB |
testcase_20 | AC | 1 ms
6,944 KB |
ソースコード
#include<iostream> #include<iomanip> #include<utility> using namespace std; //Date.txt //日付ライブラリ(完全自作) //y年がうるう年か否か bool isuruu(int y){ if(y%400==0) return 1; if(y%100==0) return 0; return y%4==0; } //y年m月が何日あるか int dpm(int y,int m){ if(m==4||m==6||m==9||m==11) return 30; if(m!=2) return 31; if(isuruu(y)) return 29; return 28; } //y年が何日あるか int dpy(int y){ if(isuruu(y)) return 366; return 365; } //400年が何日あるか constexpr int dpy400=365*400+97; //グレゴリオ暦を表す構造体 struct Gregorian{ int y,m,d; }; //1年1月1日から何日経ったか int g2n(Gregorian g){ if(!(0<=g.y&&1<=g.m&&g.m<=12&&1<=g.d&&g.d<=dpm(g.y,g.m))) throw; int ans=(g.y-1)/400*dpy400; g.y=(g.y-1)%400+1; for(int i=1;i<g.y;i++) ans+=dpy(i); for(int i=1;i<g.m;i++) ans+=dpm(g.y,i); ans+=g.d-1; return ans; } //1年1月1日からn日後は何日か Gregorian n2g(int n){ if(!(0<=n)) throw; Gregorian ans={1,1,1}; ans.y+=n/dpy400*400; n%=dpy400; while(dpy(ans.y)<=n){ n-=dpy(ans.y); ans.y++; } while(dpm(ans.y,ans.m)<=n){ n-=dpm(ans.y,ans.m); ans.m++; } ans.d+=n; return ans; } //マヤ暦を表す構造体 struct Mayan{ int b,ka,t,w,ki; }; //マヤ歴の周期 constexpr int period=20*18*20*20*13; //0.0.0.0.0から何日経ったか int m2n(Mayan m){ if(!(0<=m.b&&m.b<13&&0<=m.ka&&m.ka<20&&0<=m.t&&m.t<20&&0<=m.w&&m.w<18&&0<=m.ki&&m.ki<20)) throw; int ans=m.b; ans=ans*20+m.ka; ans=ans*20+m.t; ans=ans*18+m.w; ans=ans*20+m.ki; return ans; } //0.0.0.0.0からn日後は何日か Mayan n2m(int n){ n=(n%period+period)%period; Mayan ans; ans.ki=n; ans.w=ans.ki/20; ans.ki%=20; ans.t=ans.w/18; ans.w%=18; ans.ka=ans.t/20; ans.t%=20; ans.b=ans.ka/20; ans.ka%=20; ans.b%=13; return ans; } //グレゴリオ暦からマヤ歴への変換 Mayan g2m(Gregorian g){ return n2m(g2n(g)-g2n({2012,12,21})); } //マヤ歴からグレゴリオ暦への変換 Gregorian m2g(Mayan m){ return n2g(m2n(m)+g2n({2012,12,21})); } int main(){ Gregorian g; char c; cin>>g.y>>c>>g.m>>c>>g.d; g=n2g(g2n(g)+2); cout<<setfill('0')<<setw(4)<<g.y<<'/'<<setw(2)<<g.m<<'/'<<setw(2)<<g.d<<endl; }