牛客国庆集训派对Day1 C-Utawarerumono(扩展欧几里得)

链接:https://www.nowcoder.com/acm/contest/201/C
来源:牛客网

算术是为数不多的会让Kuon感到棘手的事情。通常她会找Haku帮忙,但是Haku已经被她派去买东西了。于是她向你寻求帮助。
给出一个关于变量x,y的不定方程ax+by=c,显然这个方程可能有多个整数解。Kuon想知道如果有解,使得p2*x2+p1*x+q2*y2+q1*y最小的一组整数解是什么。为了方便,你只需要输出p2*x2+p1*x+q2*y2+q1*y的最小值。
 
#include <cstdio>
#include <cstring>
#include <cmath>
#include<algorithm>
#include<iostream>
using namespace std;
typedef long long ll;
ll p2,p1,q2,q1;
ll a, b, c, d, x, y;
ll ans=1e18;
ll Exgcd(ll a, ll b)
{
    if(b==0){ x=1, y=0;return a;}
    ll r = Exgcd(b, a%b);
    ll tp=x;
    x = y;
    y = tp-a/b*y;
    return r;
}
int main()
{
        cin>>a>>b>>c>>p1>>p2>>q1>>q2;
        d = Exgcd(a, b);
        if(((a==0)&&(b==0)&&c) || c%d!=0 )
            printf("Kuon\n");        
        else{
           for(int i=-100005;i<=100005;i++){
                if((c-a*i)%b==0){
                    ll iy=(c-a*i)/b;
                    ll ac=p2*i*i+p1*i+q2*iy*iy+q1*iy;
                    ans=min(ans,ac);
                }
           }
           cout<<ans<<endl;
        }
    return 0;
}

 

 

posted @ 2018-10-03 21:06  Somnus、M  阅读(215)  评论(0编辑  收藏  举报