要求求出的解满足|x|+|y|最小,第二条件是x<=y。
直接求解即可,无需加特判。
有点疑问?

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int _gcd(int x,int y)
{
    return y?_gcd(y,x%y):x;
}
int extend_gcd(int a,int b,int &x,int &y)
{
    if(!b)
    {
        x=1;
        y=0;
        return a;
    }
    int ans=extend_gcd(b,a%b,x,y);
    int tmp=x;
    x=y;
    y=tmp-(a/b)*y;
    return ans;
}
void cal(int a,int b,int c)
{
    int x,y;
    int g=extend_gcd(a,b,x,y);
    b/=g;
    a/=g;
    /*int xx=x; int yy=y; for(int k=-max(abs(xx),abs(yy));k<=max(abs(xx),abs(yy));k++) { int tx=xx+k*b; int ty=yy-k*a; if(abs(tx)+abs(ty)<abs(x)+abs(y)) { x=tx; y=ty; } else if(abs(tx)+abs(ty)==abs(x)+abs(y)) { if(tx<=ty&&x>y) { x=tx; y=ty; } } }*/
    printf("%d %d\n",x,y);
}
int main()
{
    int a,b;
    while(scanf("%d%d",&a,&b)!=EOF)
    {
        int c=_gcd(a,b);
        cal(a,b,c);
    }
    return 0;
}