// の#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 <= 1?1: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 。 }