#680
Se consideră un șir A
cu N
elemente întregi nenule. Numim secvență a șirului A
orice succesiune de elemente aflate pe poziții consecutive în șir: A
i
, A
i+1
, …, A
j
cu 1 ≤ i < j ≤ N
. Prin lungimea secvenței înțelegem numărul de elemente care o compun.
Pentru orice secvenţă A
i
, A
i+1
, …, A
j
, vom numi split-point un indice k
, i ≤ k < j
, care împarte secvența în două subsecvențe nevide: A
i
, A
i+1
, …, A
k
, respectiv A
k+1
, A
k+2
, …, A
j
.
Fie Dmax
valoarea absolută maximă a diferenței sumelor elementelor celor două subsecvențe separate de un split-point, luând în considerare toate secvenţele Ai,Ai+1,…,Aj
posibile şi fie Lmax
lungimea maximă a unei secvenţe caracterizată de valoarea Dmax
.
Cunoscând N
şi valorile elementelor şirului A
, să se determine Dmax
şi Lmax
.
Lot Juniori, Vaslui, 2014
Problema | ksplit | Operații I/O |
![]() ksplit.in /ksplit.out
|
---|---|---|---|
Limita timp | 0.1 secunde | Limita memorie |
Total: 8 MB
/
Stivă 8 MB
|
Id soluție | #58125046 | Utilizator | |
Fișier | ksplit.cpp | Dimensiune | 1.72 KB |
Data încărcării | 15 Mai 2025, 11:14 | Scor / rezultat | Eroare de compilare |
ksplit.cpp:1:1: error: expected unqualified-id before string constant "# include <fstream>\n# include <climits>\n# include <cmath>\n# define NMax 100003\nusing namespace std;\n\nint i, n, Lmax;\nint a[NMax];\nlong long Max = -LONG_MAX;\nlong long smax[NMax], smin[NMax];\nint pozM[NMax];\nint pozm[NMax];\n\nvoid ssm_st_dr(long long smax[NMax], int poz[NMax], int semn)\n{\n smax[1] = a[1]; poz[1] = 1;\n for (int i=2; i<=n; ++i)\n {\n if (semn * smax[i-1] >= 0)\n {\n smax[i] = a[i] + smax[i-1];\n poz[i] = poz[i-1];\n }\n else\n {\n smax[i] = a[i];\n poz[i] = i;\n }\n }\n}\nvoid ssm_dr_st(long long smax[NMax], int poz[NMax], int semn)\n{\n smax[n-1] = a[n]; poz[n-1] = n;\n for (int i=n-2; i>0; --i)\n {\n if (semn * smax[i+1] >= 0)\n {\n smax[i] = a[i+1] + smax[i+1];\n poz[i] = poz[i+1];\n }\n else\n {\n smax[i] = a[i+1];\n poz[i] = i+1;\n }\n }\n}\nvoid sol(long long smax[NMax], long long smin[NMax], int pozM[NMax], int pozm[NMax], int semn)\n{\n for (int i=1; i<n; ++i)\n {\n long long x = semn * (smax[i] - smin[i]);\n if (x > Max)\n {\n Max = x;\n Lmax = semn * (pozM[i] - pozm[i]);\n }\n }\n}\nint main()\n{\n freopen(\"ksplit.in\", \"r\", stdin);\n freopen(\"ksplit.out\",\"w\", stdout);\n\n scanf(\"%d\", &n);\n\n for (i=1; i<=n; ++i)\n scanf(\"%d\", &a[i]);\n\n ssm_st_dr(smax, pozM, 1);\n ssm_dr_st(smin, pozm, -1);\n sol(smax, smin, pozm, pozM, 1);\n\n ssm_st_dr(smax, pozM, -1);\n ssm_dr_st(smin, pozm, 1);\n sol(smax, smin, pozM, pozm, -1);\n\n printf(\"%lld\\n%d\\n\", Max, Lmax + 1);\n\n return 0;\n}" ^
www.pbinfo.ro permite evaluarea a două tipuri de probleme:
Problema ksplit face parte din prima categorie. Soluția propusă de tine va fi evaluată astfel:
Suma punctajelor acordate pe testele utilizate pentru verificare este 100. Astfel, soluția ta poate obține cel mult 100 de puncte, caz în care se poate considera corectă.