Przesuwanie elementów tablicy - SPOJ.

0

Witam!
Zmierzyłem się z problemem ze SPOJ'a(https://pl.spoj.com/problems/PP0602D/). Napisałem kod który działa, ale nie wydaje mi się zbyt poprawny(SPOJ go przyjął). Chciałbym żeby ktoś pokazał, lub podpowiedział jak zrobić to w 100% poprawnie. (Pisane w CodeBlock'sie).

#include <iostream>

using namespace std;

int main(){
    int t, k, n[100];

    cin >> t >> k;
    for(int i=0; i<t; i++){
        cin >> n[i];
    }
    for(int i=0+k; i!=k-1; i++){
        if(i==t){
            i=0;
            k++;
        }
        cout << n[i] << " ";
    }

    return 0;
}

#EDIT Wiem, że powinienem dodać warunki jeśli chodzi o 1 < t < k < 10000.

1

:P

#include <iostream>
#include <algorithm>
#include <iterator>
#include <vector>

int main(int argc, char** argv)
{
   int count, shift;
   std::cin >> count >> shift;
   std::vector< int > numbs;
   numbs.reserve( count );
   std::copy_n( std::istream_iterator< int >( std::cin ), count, std::back_inserter( numbs ) );
   std::rotate( numbs.begin(), numbs.begin() + shift, numbs.end() );
   std::copy( numbs.begin(), numbs.end(), std::ostream_iterator< int >( std::cout, " " ) );
   return 0;
}
0
#include <iostream>
#include <iterator>
#include <vector>

int main()
{
    using namespace std;

    int n, k;
    cin >> n >> k;

    // utworzenie tablicy o rozmiarze k
    vector<int> v(k);

    // wczytanie k elementów do tablicy
    copy_n(istream_iterator<int>(cin), k, v.begin());

    // wczytanie i wyświetlenie pozostałych elementów (n-k)
    copy_n(istream_iterator<int>(cin), n - k, ostream_iterator<int>(cout, " "));

    // wyświetlenie k elementów z tablicy
    copy_n(v.begin(), k, ostream_iterator<int>(cout, " "));

    return 0;
}
0

To zadanie ma optymalną złożoność obliczeniową O(n) - z tego co wiem, i pamięciową O(1)
Czyli nie wymaga żadnych przesunięć w pamięci.

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