Exciting Bets

题目:

找到达到两个数的gcd最大的最小步数

两个数同时加减能得到的最大公约数是这两个数的差dis

a=b+dis,所以a,b哪个来操作都可以

ans=min(b%g,g-b%g)  //一个是减到能整除dis的步数,另一个是加到能整除dis的步数

官方代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    int t;
    cin >> t;
    while(t--)
    {
        long long a,b;
        cin >> a >> b;
        if(a==b)
            cout << 0 << " " << 0 << '\n';
        else
        {
            long long g = abs(a-b);
            long long m = min(a%g,g-a%g);
    
            cout << g << " " << m << '\n';
        }
    }
}

我的废物代码:

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
long long a,b;

int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%lld %lld",&a,&b);
        if(a==b)
            printf("0 0\n");
        else if(a-b==1||b-a==1)
         {
             printf("1 0\n");
         }
         else if(a==0)
         {
             printf("%d 0\n",b);
         }
         else if(b==0)
         {
              printf("%d 0\n",a);

         }
         else
         {
           if(a>b)
           {   long long dis=a-b;
            if(a%dis==0&&b%dis==0)
            printf("%lld 0\n",dis);
                  else
                  { //
                       long long  w=0,q=0;
               long long ta=a,tb=b,ttb=b;
               if(dis>=tb)
                    w=dis-tb;
                    else if(dis<tb)
                    {
                      w=(tb/dis+1)*dis-tb;
                       q=tb-(tb/dis*dis);
                      w=min(q,w);
                    }
                    if(w<tb)
                    {
                        printf("%lld %lld\n",dis,w);
                    }
                    else
                       printf("%lld %lld\n",dis,tb);

                  }


           }
           else
           {
                long long dis=b-a;
 if(a%dis==0&&b%dis==0)
            printf("%lld 0\n",dis);
            else
            {
               long long  w=0,q=0;
               long long ta=a,tb=b,tta=a;
              if(dis>=ta)
                    w=dis-ta;
                    else if(dis<ta)
                    {
                       w=(ta/dis+1)*dis-ta;
                       q=ta-ta/dis*dis;
                      w=min(q,w);
                    }

                    if(w<ta)
                    {
                        printf("%lld %lld\n",dis,w);
                    }
                    else
                       printf("%lld %lld\n",dis,ta);
            }

           }
         }
    }
}

 

posted @ 2021-07-08 09:30  废柴废柴少女  阅读(94)  评论(0)    收藏  举报