Luogu_P1516 exgcdデート問題へ[カエル]ソリューション

トピックへのリンク: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 ; 
}

 

おすすめ

転載: www.cnblogs.com/ChrisKKK/p/11442378.html