• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Przekroczenie limitu czasowego, nieskończony ciąg

Object Storage Arubacloud
0 głosów
224 wizyt
pytanie zadane 1 maja 2020 w C i C++ przez gryzedywany Użytkownik (510 p.)
edycja 2 maja 2020 przez gryzedywany

Program przekracza limit czasowy, nie wiem co można tu jeszcze skrócić :/ 

//#include <cstdio>
#include <iostream>

using namespace std;

int T[65536];
int d;
unsigned short N;
    //int T[65536]={3,14,7,6};
//int T[65536]={4096,2212,2213,3241};

//int T[65536]={2147483647,2147483646,2147483644,2147483645};

int main()
{

    ios_base::sync_with_stdio(0);
//    N=4;

    cin>>N;
    for (int j=0; j<N; j++)
    {
        cin>>T[j];
    }

    for (int j=0; j<N;j++)
    {
        d=0;
        T[j]--;
        while (T[j]>0)
        {
            d++;
            T[j]=T[j]-d;
        }
        if (T[j]==0) cout <<"1 ";
            else cout <<"0 ";
    }
}

Rozpatrzmy nieskończony ciąg cyfr złożony z rosnących potęg 10 zapisanych jedna po drugiej. Początek takiego ciągu będzie wyglądał następująco: 110100100010000... Twoim zadaniem jest stwierdić jaka cyfra znajduje się na określonej pozycji w tym ciągu.

Wejście:

W pierwszej linii wejścia znajduję się liczba naturalna N < 65536. Kolejne N linii zawierają liczby naturalne i < 2^31 – numer pozycji w ciągu.

Wyjście:

Wyjściem powinno być N cyfr 0 lub 1 pooddzielanych spacją. i-ta cyfra powinna odpowiadać i-tej cyfrze w ciągu z i-tej pozycji wejścia.

Przykład:

Wejście:


4
3
14
7
6

Wyjście:

0 0 1 0

EDIT 

Po zmianie kodu na wzór wyskakuje błędny wyniki :( oto zmieniony  kod, ktoś ma pomysł gdzie może być błąd? (standardowo dla wszystkich sprawdzanych przykładów wychodzi tak jak powinno) 

#include <iostream>
#include <math.h>

using namespace std;

int jaka_liczba (int a)
{
    double pd=0;
    int d=0;
    double y=0;
    d=1-(4*(-2*(a-1)));
    pd=sqrt(d);
    if ((int) pd!=pd) return 0;
    else
    {
        y=(-1+pd)/2;
        if ((int)y==y) return 1;
        else return 0;
    }

}
int x=0;
int n=0;
int main()
{
   cin>>x;
   //x=100;
   for(int i=0;i<x;i++)
   {
        cin>>n;
        cout<<jaka_liczba(n)<<" ";
   }


return 0;}

 

1
komentarz 2 maja 2020 przez tkz Nałogowiec (42,000 p.)

for(unsigned long long i{1}; position >= positionN_thOne(i); ++i) jest równoważne(na potrzeby tej dyskusji) z for(unsigned long long i = 1; position >= positionN_thOne(i); ++i)

Jeżeli chcesz doczytać https://cppstyle.wordpress.com/narrowing-conversions-in-c-11/ słowo klucz to narrowing.

komentarz 2 maja 2020 przez gryzedywany Użytkownik (510 p.)
Okej ale wrzuciłam do sprawdzarki twój kod i przekracza limit czasowy
1
komentarz 2 maja 2020 przez tkz Nałogowiec (42,000 p.)

Jestem w lekkim szoku. 

bool isOneSecond(unsigned long position)
{
    double temp = sqrt(1+8*position);
    if(temp == static_cast<int>(temp))
      return true;
    return false;
}

O ile wszystko dobrze przekształciłem. 

komentarz 2 maja 2020 przez gryzedywany Użytkownik (510 p.)
bool isOneSecond(unsigned long long int position)
{
    double temp = sqrt(1+(8*(position-1)));

    if(temp == static_cast<int>(temp))
    return true;
    return false;
}

Po drobnej korekcie  zadziałało, dzięki! 

1
komentarz 2 maja 2020 przez tkz Nałogowiec (42,000 p.)
Ahhh no tak, oczywiście Twój wzór jest poprawniejszy. Rozpisałem go, zaczynając od 10, nie od 1.

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

0 głosów
1 odpowiedź 396 wizyt
pytanie zadane 2 maja 2020 w C i C++ przez gryzedywany Użytkownik (510 p.)
0 głosów
1 odpowiedź 1,398 wizyt
pytanie zadane 15 listopada 2018 w C i C++ przez Ignacy Nowicjusz (160 p.)
0 głosów
4 odpowiedzi 1,604 wizyt

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...