spoj- potęgowanie

0

http://ideone.com/rCUkt8 --->kod
http://pl.spoj.com/problems/PA05_POT/ ---> zadanie
Czy mógłby ktoś mnie nakierować na poprawne myślenie? Cały czas próbuje jakoś ogarnąć te potęgi:
Dla niektórych liczb są 4 możliwe odpowiedzi
Dla tych co była jedna możliwa odpowiedź to jest ustalone
Dla pozostałych są dwie możliwości, czyli odpowiedź będzie zależna od tego czy potęga do której mam podnieść jest parzysta czy nie, tak?
Ale te poczwórne przypadki to jakos nie mogę dla nich za bardzo nic wymyślić, np. dla 8 ostatnią cyfą będzie 8 dla kolejnych potęg 1,5,9,13... itd
Ale nie bardzo mam pomysł jak to zapisać

0

Dla wszystkich potęg jest jedna, dwie albo cztery możliwe ostatnie cyfry. Innych możliwości NIE MA. Swoją drogą czym liczyłeś dla 8? bo mi wyszło:
8
64
512
4096
32768
262144
2097152
16777216
134217728

1

popatrz na kolejne potęgi ostatniej cyfry:
0 - 0 0 0 0 0 0 0 0 0
1 - 1 1 1 1 1 1 1 1 1
2 - 2 4 8 6 2 4 8 6 2
3 - 3 9 7 1 3 9 7 1 3
4 - 4 6 4 6 4 6 4 6 4
5 - 5 5 5 5 5 5 5 5 5
6 - 6 6 6 6 6 6 6 6 6
7 - 7 9 3 1 7 9 3 1 7
8 - 8 4 2 6 8 4 2 6 8
9 - 9 1 9 1 9 1 9 1 9
Widać cykl, tylko ostatnia cyfra wykładnika ma wpływ na wynik, do tego cykl, czyli wynik możesz sobie stabilizować.

I jeszcze to https://4programmers.net/Forum/C_i_C++/289557-spoj_przekroczono_limit_czasu_szachownica_vs_kwadraty?p=1360213#id1360213

0

@GrumpyFox: chyba @MarekR22 chodziło o coś takiego:

#include <iostream>

int main()
{
    int howMany = 0;
    int a[10], b[10];

    int array[9][9] = {
        {1,1,1,1,1,1,1,1,1},
        {2,4,8,6,2,4,8,6,2},
        {3,9,7,1,3,9,7,1,3},
        {4,6,4,6,4,6,4,6,4},
        {5,5,5,5,5,5,5,5,5},
        {6,6,6,6,6,6,6,6,6},
        {7,9,3,1,7,9,3,1,7},
        {8,4,2,6,8,4,2,6,8},
        {9,1,9,1,9,1,9,1,9}
                      };
    std::cin>>howMany;

    for (int i=0; i< howMany; i++)
    {
        std::cin>>a[i]>>b[i];
    }
    for (int i=0; i<howMany; i++)
    {
        std::cout<<array[a[i]%10-1][b[i]%4-1]<<"\n";
    }
}

Jednak nie wiem, dlaczego SPOJ nie chce mi tego przyjąć.
Podejrzewam, że coś nie tak mam z I/O.

0

@bl4ster no i crash i na dodatek zła odwiedź.

static cosnt char tab[][] = {
        {'0','0','0','0'},
        {'1','1','1','1'},
        {'6','2','4','8'},
        {'1','3','9','7'},
        {'6','4','6','4'},
        {'5','5','5','5'},
        {'6','6','6','6'},
        {'1','7','9','3'},
        {'6','8','4','2'},
        {'1','9','1','9'}
    };
unsigned int a, b;
while(cin >> a >> b)
{
    if (b != 0) {
        cout << tab[a%10][b%4] << '\n';
    } else {
        cout << '1' << '\n';
    }
}

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