問題への羅区P2010 [日付]パリンドロームソリューション

アイデア:アナログ、列挙する

この質問は、2番目の質問のグループの人気として、私はそれがまだいくつかの困難を持っている選手たちのグループの人気のためであると考え、NOIP2016 PJ T2です。

私は、$ O(N ^ 2)$アプローチの「QQ赤い封筒」ギャング管理者の日@列挙は、トリプルループ、列挙日付を書いて、その後、回文かどうかを判断することを考えていませんでした。そして、それは(最悪の溶液となりました

コードの主なコメント。

$の\ RMコード$

#は、<ビット/ STDC ++を。H>含める
#LL定義長い 長い
位RG定義レジスタ
#はILインライン定義
#はMEM(NUM)のmemset(NUM、定義はsizeof (A)) 定義デバッグ(S、X)COUTを << S << " - > " << X << ENDL
 CONSTの ブール OJ = 使用して 名前空間はstdを、
テンプレート <型名T> 
IL ボイドのreadInt(T&X){ 
    X = 0RG T F = 1RG チャー CH = GETCHAR()。
    同時にF = CH ==(isdigit(CH)!)' - '- 1:F、CH = GETCHAR()。
    一方、(isdigit(CH))X = X * 10 + CH - ' 0 '、CH = GETCHAR()。
    X * = F。
} 
テンプレートは <型名T> 
のIL INT MAX(T Aは、T B)は、{ 戻る > bは?A:B;} 
テンプレート <型名T> 
のIL INT MIN(T Aを、T b)は{ 返す <bは?A:B;}
 ボイドファイル(){ 
    freopenは(" 1.in "" R " 、STDIN)。
    freopenは(" 1.out "" W " 、STDOUT)。
} 
// ---ヘッドファイル--- //
 
int型日付1、日付2。// 两个日期
INT xhw [ 13 ] = { 0312831303130313130313031 }。//何日、各月、2月に予定うるう年に、それは特別な取り扱いが必要です。
IL のボイドの変更(int型); // 変更機能日時2月 
IL BOOL ORZ(int型int型int型); //は、日付がパリンドロームの数の関数であるかどうかを判断
INT (メイン){
     IF(! )(OJ ファイル); 
    のreadInt(DATE1)、のreadInt(それがDATE2によって表される); 
#Y1のY1を定義// 何かでこの変数Y1のcmathライブラリが競合しているので、我々は最初にここでそれを定義する
    int型 Y1 =日付1/ 10000、Y2 = DATE2によって表されること/ 10000、M1 = DATE1 / 100100、M2 = DATE2 / 100100// 月の列挙は、ノートを取る必要がある場合。私たちは、私はプライベートの手紙をすることができ、そこに理解していない場合は、自分の表情を理解しようとすることができます。ここでは、レイアウトやその他の理由は、精巧ではないので。
    
        
        INT H = T1; H <= T2; H ++){ // 列挙月
            IF(H == 2)変化(X); // 2月なら変化関数に
            するためのINT W = 1 ; W <= XHW [H]; W ++)// 列挙日
                IF(ORZ(X、H、W))ANS ++; // もし日付パリンドローム、ANS蓄積。
        } 
    } 
    のprintf(" %のD "、ANS); // 最終的な出力ができるANS。
    戻り 0 ; 
} 
IL 空隙変更(INT X){ 
    XHW [ 2 ] =(((X%4 == 0)&&(X-%100 =!0))||(X-%400 == 0))?2928 ; // 年がうるう年の場合は、日数2月29日に、それ以外の場合は28 。
} 
IL BOOL ORZ(int型 X、int型 H、INT W){
     int型 A [ 10 ]; 
    [ 1。 = X /] 1000年、Aを[ 2 ] = X / 10010、[ 3 ] = X / 1010、[ 図4] X%= 10、[ 5 ] = H / 10、[ 6 ]%のH = 10、[ 7 ] = W / 10、[ 8 ] W%= 10 ;
     // 分解八年すべての昼間
    IF([ 。1 ] [== 8 ] && [ 2 ] [== 7 ] && [は3 ] == [する。6 ] && [ 。4 ] [する== 。5 ])リターン trueに ; // 日付が回文である場合は、trueに返す
    リターン はfalse ; // そうでない場合はfalse
}

 

ます。https://www.cnblogs.com/Xray-luogu/p/11006445.htmlで再現

おすすめ

転載: blog.csdn.net/weixin_34248705/article/details/93306837