원래 제목
주제 분석
이것은 방정식의 타이틀로 알려져이를 해결 될
(X +에서의 d) ≡p (mod23)
(X +에서의 d) ≡e (mod28)
(X + D) ≡i (mod33)
분명히 232,833는 서로 소이므로,이 문제는 단순히 사용 중국인 나머지 정리 결론을 ANS-ANS D = (ANS %의 LCM (23,28,33 마지막으로 ANS-X + (D)를 얻은 후, 및 () + LCM 23,28,33)) LCM (23,28,33)는 여기에 유의, 작은 양의 용액에서 수행 될 수는 시간 ANS에게 때 0 ANS = LCM (23,28,33).
코드
1 #INCLUDE <iostream> 2 #INCLUDE <알고리즘> 3 #INCLUDE <유틸리티> 4 #INCLUDE <cstdio> 5 #INCLUDE <cstdlib> 6 #INCLUDE <ctime이> 7 #INCLUDE <cmath> 8 #INCLUDE <CString을> 9 # <포함 문자열 > 10 #INCLUDE <벡터> 11 #INCLUDE <적층> 12 #INCLUDE <큐> 13 #INCLUDE <지도> 14 #INCLUDE은 < 설정 > 15 16을 사용하여 공간의 성병; 17 타입 정의 부호없는 긴 긴 ULL; 18 의 typedef 긴 긴 LL; 19 타입 정의 긴 더블 LB; 20 CONST INT INF_INT = 0x3f3f3f3f ; 21 CONST LL INF_LL = 0x3f3f3f3f3f3f3f3f ; 22 23 LL의 N = 3 ; 24 INT A [ 3 ], m [ 3 ] = { 23 , 28 , 33 }; 25 26 LL의 exgcd (LL A, B를 LL, LL 및 X, LL 및 Y) 27 { 28 하다면(! b) 29 { 30 , X = 1 , Y는 = 0 ; 31 돌아 a 및 32 } 33 LL exgcd g = (B, A %의 B, Y, X); 34 Y- = A / B * X; 35 리턴 g; 36 } 37 38 (LL 해결 INT의 d) 39 { 40 LL M = 1 , ANS를 = 0 , X, Y; (41) 에 대한이 ( int로 I = 0 ; I <N은, 내가 ++) M = m * [I], A [i]는 (%) = m [I]; (42) 에 대한( int로 = 1을 0 ; i가 N <; 내가 ++ ) 43 { 44 LL t = M / m [I]; 45 exgcd (t, m [i]는, X, Y); 46 ANS + = A [i]는 *의 * t의 X; 47 } 48 ans- = D; 49 의 ANS = ((ANS %의 M) + M) %의 M; 50 의 경우 ANS + = (ANS!) M; 51 리턴 ANS; 52 } 53 54 INT 주 () 55 { 56 // freopen을 ( "std.in", "R", 표준 입력); 57 // freopen을 ( "std.out", "w", 표준 출력); 58 INT의 D, CNT = 1 ; (59) 동안 (~는 scanf ( " % D % D % D % D ' , A [ 0 ], A [ 1 ], A [ 2 ], d) && (a [ 0 ] =! - 1 || A [ 1 ] ! = - 1 || A [ 2 ! = - 1 ! || D = - 1 )) (60) 의 printf ( " . 케이스 % D : 다음 삼중 피크 %의 LLD 일 발생 \ n " , CNT ++ 해결 (d )); 61 반환 0 ; 62 }