Optymalizacja kodu C++

0

Witam. Otóż mam taki kod i niestety nie przechodzi testów z powodu zbyt wolnego działania. Ogólnie program ma liczyć sumę ciągu jedynkowo-dwójkowego w danym przedziale.

#include <iostream>
#include <cstdio>
using namespace std;

main() {
  int a, b, c, suma;
  int i = 0;
  scanf("%d", &a);
  int o[a];

  while (a > i) {
    scanf("%d %d", &b, &c);
    suma = 0;

    while (b <= c) {
      if (b % 2 == 0) {
        suma += 2;
      } else {
        suma++;
      }
      o[i] = suma;
      b++;
    }
    i++;
  }

  i = 0;

  while (a > i) {
    if (i == a - 1) {
      printf("%d", o[i]);
      i++;
    } else
      printf("%d\n", o[i]);
    i++;
  }
}
1

Na początek polecam: http://format.krzaq.cc/, bo tego nikt czytać nie będzie.

0

Faktycznie, przydatne :) Mam nadzieję, że teraz jest lepiej.

0
main()

ma byćint main()

```cpp
int o[a];

niepoprawny C++

#include <cstdio>

po co?

Podaj całą treść zadania, bo tak to nie wiadomo co robisz.

0

Treść zadania:

Dany jest następujący ciąg liczbowy: 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, . . ., którego elementy numerowane są od 1. Twoim
zadaniem jest policzyć sumę liczb na przedziale od x do y.
Wejście
W pierwszym wierszu standardowego wejścia zapisano liczbę przypadków testowych t . W kolejnych
t wierszach zapisano zapytania. Każde zapytanie składa się z dwóch liczb naturalnych x, y .
Wyjście
W t wierszach standardowego wyjścia powinny znaleźć się odpowiedzi na kolejne zapytania – suma liczb na
przedziale [x, y].

U mnie jest b,c za x,y.

1

Można w czasie stałym policzyć sumę z dowolnego przedziału. A Ty masz czas liniowy, stąd nie przechodzi testów.
Każda nieparzysta liczba (pierwsza, trzecia, piąta itd.) to 1 (numerowanie od 1), a każda nieparzysta to 2, więc wystarczy policzyć w czasie stałym ile jest liczb parzystych, a ile nieparzystych w przedziale.

1

Mógłbyś to policzyć tak:
jeżeli y - x parzyste
suma = (y-x) + (y-x)*2

jeżeli y - x nieparzyste to:
jeżeli x parzysty -> suma = (x-y+1) + (x-y)*2
jeżeli x nieparzysty -> suma = (x-y) + )=(x-y+1)*2

0

Rozumiem, dziękuję bardzo :) Zaraz zobaczę jak to wyjdzie

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