SPOJ - Przekroczenie limitu czasu

0

Witajcie !
Ćwiczę sobie na tym SPOJu i mam zagwoztkę. Obecnie robię zadanie: http://pl.spoj.com/problems/EUCGAME/ .
Mój kod wygląda tak:

#include <iostream>
using namespace std;

bool f_EndRound(int a, int b){
    return (a == 0 || b == 0 || a == b);
}
int f_StartRound(int a, int b){
    while(!f_EndRound(a, b))
    {
        if(a > b)
         a -= b;
        else
        if(b > a)
         b -= a;
    }
    return a+b;
}
int main()
{
    int t;
    for(cin>>t; t>0; --t)
    {
        int a, b;
        cin >> a >> b;
        cout << f_StartRound(a, b) << endl;
    }
    return 0;
}

Niestety dla 1 z 3 przypadków przekraczam czas wykonania 1.01s/1s. Próbowałem funkcje f_EndRound() wepchnąć bezpośrednio do pętli while, bez zmian. Macie pomysł?

#include <iostream>
using namespace std;

int f_StartRound(int a, int b){
    while(a != 0 && b != 0 && a != b)
    {
        if(a > b)
         a -= b;
        else
        if(b > a)
         b -= a;
    }
    return a+b;
}
int main()
{
    int t;
    for(cin>>t; t>0; --t)
    {
        int a, b;
        cin >> a >> b;
        cout << f_StartRound(a, b) << endl;
    }
    return 0;
}
 
1
#include <cstdio>
using namespace std;

unsigned nwd(unsigned a,unsigned b)
  {
   while(b)
     {
      unsigned r=a%b;
      a=b;
      b=r;
     } 
   return a; 
  }

int main()
  {
   unsigned T,A,B;
   for(scanf("%u",&T);T--;printf("%u\n",nwd(A,B)<<1)) scanf("%u%u",&A,&B);
   return 0;
  }
0

Miałeś rację, dodałem tylko

int f_StartRound(int a, int b){
    if((a == 1 && b > 1) || (a > 1 && b == 1))
     return 2; 

i po sprawie, dziękować ! Problem w tym, że powinienem sam wyłapywać takie możliwości a nie lecieć na forum jak leniwy student informatyki (nie jestem studentem)

1 użytkowników online, w tym zalogowanych: 0, gości: 1