Witam, rozwiązywałem tytułowe zadanie ze SPOJ'a i udało mi się napisać taki oto kod (wg. mnie prawidłowy).
#include <iostream>
int main()
{
short D,number,numbers2[4]={2,4,8,6},numbers3[4]={3,9,7,1},numbers4[2]={4,6},numbers7[4]={7,9,3,1},numbers8[4]={8,4,2,6},numbers9[2]={9,1},j=0;
long long int a,b;
std::cin>>D;
for(int i=0;i<D;i++)
{
std::cin>>a>>b;
if (a==0 || a%10==0)
number=0;
else if (a==1 || a%10==1 || b==0)
number=1;
else if (a==2 || a%10==2)
for(int i=1;i<=b;i++,j++)
{
number=numbers2[j];
if (i%4==0)
j=-1;
}
else if (a==3 || a%10==3)
for(int i=1;i<=b;i++,j++)
{
number=numbers3[j];
if (i%4==0)
j=-1;
}
else if (a==4 || a%10==4)
for(int i=1;i<=b;i++,j++)
{
number=numbers4[j];
if (i%2==0)
j=-1;
}
else if (a==5 || a%10==5)
number=5;
else if (a==6 || a%10==6)
number=6;
else if (a==7 || a%10==7)
for(int i=1;i<=b;i++,j++)
{
number=numbers7[j];
if (i%4==0)
j=-1;
}
else if (a==8 || a%10==8)
for(int i=1;i<=b;i++,j++)
{
number=numbers8[j];
if (i%4==0)
j=-1;
}
else if (a==9 || a%10==9)
for(int i=1;i<=b;i++,j++)
{
number=numbers9[j];
if (i%2==0)
j=-1;
}
std::cout<<number<<std::endl;
j=0;
}
return 0;
}
Treść zadania: http://pl.spoj.com/problems/PA05_POT/
Mam pytanie, widziałem już pewne, o wiele szybsze rozwiązania tego zadania, jednak ciekawi mnie czy mógłbym przyśpieszyć ten kod jednocześnie nie zmieniając jego konstrukcji diametralnie. Zależy mi właśnie na tym, abym nie zmieniał większości kodu, chciałbym mniej więcej tego typu rozwiązanie wysłać. Mógłby mi ktoś coś doradzić, abym mógł wystarczająco przyśpieszyć ten kod, żeby SPOJ mógł go zaliczyć?