Cod sursa(job #3159727)

Utilizator IonicaDavidIonica David IonicaDavid Data 21 octombrie 2023 21:07:44
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.79 kb
#include <iostream>
#include <fstream>
using namespace std;
char n,cur,prec;
unsigned int i,lung,v[100002],cerinta, st[100002], nr1, nr2, nr3, vf;/// 1=">" 0="<"
long long s;
unsigned int maxi,aux,alt,ok;
int maxim(int a, int b)
{
    if (a>b)
        return a;
    return b;
}
int main()
{
    ifstream f("charlie.in");
    ofstream g("charlie.out");
    f>>cerinta;

    ///cerinta 1
    if(cerinta==1)
    {
        f>>prec;
        while(f>>cur)
        {
            if(prec>cur)
                v[++i]=1;
            else
                v[++i]=0;
            prec=cur;
            lung++;
        }

        for(i=1; i<=lung; i++)
            cout<<v[i]<<' ';

        i=1;
        while(i<lung)
        {
            ok=0;
            aux=1;
            while(v[i]==0)
                i++;

            for(i; i<lung && !ok; i++)
                if(v[i]!=v[i+1])
                    aux++;
                else
                    ok=1;

            if(aux>maxi)
                if(aux%2==1)
                    maxi=aux;
                else
                    maxi=aux+1;

        }
        if(aux>maxi)
            if(aux%2==1)
                maxi=aux;
            else
                maxi=aux+1;
        g<<maxi;
    }
    else
    {
        while(!f.eof())
        {
            f>>cur;
            nr3 = cur-96;
            cout << cur << ' ';
            st[++vf]=nr3;
            while (vf>=3&&st[vf-2]>st[vf-1]&&st[vf]>st[vf-1])
            {
                s+=maxim(st[vf], st[vf-2]);
                st[vf-1]=st[vf];
                --vf;
            }

        }
        for (i=1; i<vf; ++i)
            g << char(st[i]+96);
        g << '\n';
        g << s;
    }

     f.close();
     g.close();
    return 0;
}