トピックへのリンク:https://www.luogu.org/problem/P1516
これは、タイトルによって描画することができます。
X + M = Kの*のY + K×n個(V 1)
式にMODリットル:
(XY)=(NM)* K +のL * T
C wのセットとして提供されるNM XY
それから
* W + L K・T = C
次に、あなたが解決することがexgcdを使用することができます。
まず解決
+のL *、T、W、K * = D = GCD(W、L)
そして、その答え掛けるC / Dがアップを得ることができます。
しかし、コード統計答えの最後の行である妖精の式は、存在し、最適なソリューションではありません。
金型を取ります。
コードは以下の通りであります:
#include <ビット/ STDC ++ H> の#defineは長い長いllの 使用 名前空間STDを、 X、Y、M、N、L、X、Y LL。 LL(LL、LLのB LL exgcd&X、LL&{y)の 場合(!B){ X = 1 ; Yは= 0 ; 返します。 } LL ANS = exgcd(B、%のB、X、Y)。 LL Z =のX。 X = Y。 Y = Z-Y *(A / B)。 戻るANSを。 } int型のmain() { scanf関数(" %LLD%LLD%LLD%LLD%LLD"&X&Y、&M、&N、&L); LL K = NM、S = X- Y; もし(K < 0 ){ K = -k; S = - S; } LL ANS = exgcd(K、 L、X、Y) であれば(S%のANS =!0)のprintf(" 不可の\ n " ); 他のprintf(" %LLDする\ n "、(X×(S / ANS)%(L / ANS)+ (L / ANS))%(L / ANS)); // システム( "一時停止"); 戻り 0 ; }