UVA756バイオリズム中国の剰余定理

// の#pragma GCCの最適化(2)
の#pragmaコメント(リンカ、 "/ STACK:10240000,10240000")
の#include <iostreamの> 
の#include <cstdioを> 
する#include <cmath> 
の#include <CStringの> 
の#include < 文字列 > 
#含める <キュー> 
の#include <マップ> 
書式#include < セット > 
の#include <スタック> 
の#include <リスト> 
の#include <ctimeの> 
の#include <のctype.h> 
書式#include <stdlib.h>に含ま
する#include <ビットセット> 
の#include <アルゴリズム> 
の#include<assert.h> 
の#include <数値> // 蓄積
の#define ENDLを"\ n"
 の#define Fiの第一
 の#define SE第二
 の#define forn(I、S、T)(iは(S)= int型のために、私は(< T); ++ I)
 の#define MEM(a、b)はmemsetの(A、B、はsizeof(A))
 の#defineラッシュ()int型MYTESTNUM; cinを>> MYTESTNUM、しばらく(MYTESTNUM--)
 の#defineデバッグ(X )のprintf( "%d個の\ n"、X)
 の#define INF 0x3f3f3f3f
 の#define INF 0x3f3f3f3f3f3f3f3f
 の#define融点make_pair
 の#define PB一back
 の#define SC(X)のscanf( "%dの"、およびX)
 の#define SC2(X、Y )のscanf( "%D%dの"、およびX、
&Y) の#defineSC3(X、Y、Z)のscanf( "%D%D%D"、およびX&Y、およびZ)
 の#define PF(X)のprintf( "%d個の\ n"、X)
 の#define PF2(x、y)はprintf( "%D%D \ n"、x、y)は
 の#define PF3(X、Y、Z)のprintf( "%D%D%D \ n"は、X、Y、Z)
 の#defineは長い長いっ
 #定義 ULL符号なし長い長
 の#define DD二重
 の#define( "*****")PFSプットを
 の#define PFK(X)のprintf( "%dの"、(X))
 の#define KPF(X)のprintf(」%dの」(X))
 の#define pfdd(X)のprintf( "%5Fに\ n"、(X));
#define pfhhのprintf( "\ n")を
 使用して 名前空間はstdを、
CONSTのLL P = 1E9。; (; B; = A * 2%のP、B >> = 1であれば(B&1)ANS =(ANS + A)%のP。戻りANSを;} 
LL qpow {LLのR(LL N、LL) = 1%のP。(; N = *%P、N >> =%P = 1であれば(&N 1)、R = R *%のP。リターンrは;} 
LL INV(LL X){ 戻り X <= 11:INV(P%以下のX)*(PP / X)%P;}
 CONST  INT MAXN = 550 
インラインint型リード()
{ 
    int型 X = 0、W =0 ; CHAR CH = 0 ;
     一方 {W | = CH ==(isdigit(CH)!)' - ' ; CH = GETCHAR();}
     ながら(isdigit(CH))、X =(X - << 3)+( << X- 1)+(CH ^ 48)、CH = GETCHAR();
     戻り W? - X-:X-; 
} 
int型 GCD(INT A、int型B){
     戻り Bを:GCD(%B!A、 ); 
} 
/ * POJ1006 UVA756 UVALive5421バイオリズム* / 
// 拡張ユークリッドアルゴリズムを実現するための再帰的方法
ロング A [ 3。、Mは[]3 ]。
長い N = 3 長い exgcd(長い長い B、長い   * X、長い *のY)
{ 
    長い X0 = 1、Y0 = 0、X = 0、Y1 = 1 長いR、Q。
    * X = 0 * yは= 1 

    R =%のB; 
    Q =( - R)/ B。
    一方、(R)
    {
         q個*の- * X = X0 、X1
        * Y = Y0 -のq *のY1。
        X0 = X1; 
        YO = Y1、
        X1 = * X、
        Y1 = * Y; 

        A = B; 
        B = R&LT; 
        R&LT =%のB; 
        Q =(A - R&LT)/ B; 
    } 
    戻りB; 
} 

// 拡張ユークリッドアルゴリズムは、反転さ
ロング MINV(ロング A、ロングP)
{ 
    ロング; X、Y 
    exgcd(A、P、およびX&Y);
     返す X < 0のX +は?P:X; 
} 

// 中国剩余定理(中国の剰余定理、CRT)
長いCRT()
{ 
    長い BM = 1、MI、X = 0 int型私は、

    (i = 0 ; iがn <; iは++ 
        BM * =のM [i]は、
    (i = 0 ; iがn <; iは++ ){ 
        MI = BM / M [i]は、
        X + = A [i]は*マイル* MINV(MI、M [I])。
        X%= BM。
    } 

    戻りX; 
} 

int型のmain()
{ 
    int型カセ= 1 一方、1 
    { 
        int型の和= 0 以下のためにint型 i = 0 ; iは< 3 ; ++ I){ 
            SC([I])。
            もし([I] == - 1)合計++ 
        } 
        int型D。
        SC(D)。
        もし(合計== 3ブレーク
        M [ 0 ] = 23、M [ 1 ] = 28、M [ 2 ] = 33 長い ANS = CRT()。
        一方、(ANS <= D)ANS + = 21252 
        printf(" ケース%D:次のトリプルピークの%ld日に発生します。\ n "、加瀬++、ans- D)。
    } 
    戻り 0 
}
コードの表示

 

おすすめ

転載: www.cnblogs.com/LS-Joze/p/11446363.html