Cod sursa(job #3165306)

Utilizator gianiferSpita Alexandru-Mihai gianifer Data 5 noiembrie 2023 21:13:16
Problema Buline Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.64 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("buline.in");

ofstream fout("buline.out");

int v[400010], n, x;
int sumfinal;
int main()
{
    fin >> n;
    for (int i = 1; i <= n; i++)
    {
        fin >> v[i] >> x;
        v[i] = (v[i] + 2 * x * v[i] - 2 * v[i]);
        sumfinal += v[i];
        v[n + i] = v[i];
    }
    int suma = 0, sumamax = 0;
    int salvare = 1, primul, lungime = 0, salvarelungime = 0;
    for (int i = 1; i <= n; i++)
    {
        if (suma > 0)
        {
            suma = v[i];
            salvare = i;
            salvarelungime = 1;
        }
        else
            suma += v[i], salvarelungime++;
        if (suma < sumamax)
        {
            primul = salvare;
            sumamax = suma;
            lungime = salvarelungime;
        }
    }
    int suma1 = 0, sumamax1 = 0;
    int salvare1, primul1, salvarelungime1, lungime1;
    for (int i = 1; i <= 2 * n; i++)
    {
        if (suma1 + v[i] >= v[i] && salvarelungime1 <= n - 1)
        {
            suma1 += v[i];
            salvarelungime1++;
        }
        else
            suma1 = v[i], salvare1 = i, salvarelungime1 = 1;
        if (suma1 > sumamax1)
        {
            primul1 = salvare1;
            sumamax1 = suma1;
            lungime1 = salvarelungime1;
        }
    }
    if (sumamax1 > sumfinal-sumamax)
        fout << sumamax1 << " " << primul1 << " " << lungime1;
    else
    {
        if (primul + lungime - 1 == n)
            primul = 1;
        else
            primul += lungime;
        fout << sumfinal - sumamax << " " << primul << " " << n - lungime;
    }
}