0694 - Sam

From Bitnami MediaWiki
Revision as of 16:51, 3 June 2024 by RebecaBud (talk | contribs) (Pagină nouă: == Enunt == Aranjăm primele N numere naturale nenule sub forma unui șir A[1], A[2], ..., A[N]. Fie X[1], X[2],...,X[K] (K ≥ 3), un subșir al șirului A. Numim extrem local al subșirului X termenul din mijlocul unei secvențe de lungime trei din subșir, X[i-1], X[i], X[i+1], cu proprietatea: X[i-1]<X[i]>X[i+1], 1<i<K sau X[i-1]>X[i]<X[i+1], 1<i<K. Vom nota cu nrex(X) numărul de extreme locale ale subșirului X. Spunem că un subșir X[1], X[2],...,X[K] (K≥2) al...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Enunt[edit | edit source]

Aranjăm primele N numere naturale nenule sub forma unui șir A[1], A[2], ..., A[N].

Fie X[1], X[2],...,X[K] (K ≥ 3), un subșir al șirului A. Numim extrem local al subșirului X termenul din mijlocul unei secvențe de lungime trei din subșir, X[i-1], X[i], X[i+1], cu proprietatea: X[i-1]<X[i]>X[i+1], 1<i<K sau X[i-1]>X[i]<X[i+1], 1<i<K.

Vom nota cu nrex(X) numărul de extreme locale ale subșirului X.

Spunem că un subșir X[1], X[2],...,X[K] (K≥2) al șirului A este subșir alternant dacă nrex(X)=K-2, adică exceptând primul și ultimul termen din subșir toți ceilalți termeni sunt extreme locale ale subșirului X.

Dintre toate subșirurile alternante ale șirului A ne interesează cele de lungime maximă pe care le vom numi subșiruri alternante maximale.

Cerinţa[edit | edit source]

Cunoscând N și tabloul A se cere să se determine restul obținut la împărțirea dintre numărul M al subșirurilor alternante maximale ale tabloului A și numărul 1000003.

Date de intrare[edit | edit source]

Fișierul de intrare sam.in conţine pe prima linie numărul natural N. Pe linia a doua se găsesc cele N numere ale șirului dat separate prin câte un spațiu.

Date de ieșire[edit | edit source]

În fişierul de ieşire sam.out se va scrie numărul obţinut ca rest la împărţirea dintre numărul M, având semnificația descrisă mai sus, şi numărul 1000003.

Restricţii şi precizări[edit | edit source]

  • 3 ≤ N ≤ 100 000

Exemplul 1[edit | edit source]

sam.in
 7
 1 3 5 4 7 6 2
sam.out
6

Explicație[edit | edit source]

Șirul dat conține trei extreme locale , valorile 5, 4 și 7. Cele șase subșiruri alternante maximale cu șirul dat sunt: (1 5 4 6 2), (1 5 4 7 2), (1 5 4 7 6), (3 5 4 6 2), (3 5 4 7 2), (3 5 4 7 6)


Rezolvare[edit | edit source]

<syntaxhighlight lang="python" line> def count_alternating_subsequences(N, A):

   count = 0
   
   for i in range(1, N - 1):
       if (A[i - 1] < A[i] > A[i + 1]) or (A[i - 1] > A[i] < A[i + 1]):
           count += 1
   
   return count

def main():

   with open("sam.in", "r") as fin:
       N = int(fin.readline())
       A = list(map(int, fin.readline().split()))
   
   M = count_alternating_subsequences(N, A)
   
   with open("sam.out", "w") as fout:
       fout.write(str(M % 1000003))

if __name__ == "__main__":

   main()

</syntaxhighlight>