Cod sursa(job #652976)

Utilizator dutzulBodnariuc Dan Alexandru dutzul Data 26 decembrie 2011 22:57:18
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 2.99 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("expresie2.in");
ofstream g("expresie2.out");
int st,r,n,okz,w,nr;
string s;
int dre(int &st);
int rot (int &st)
{
        int p1[100000],t,n1=0,m=-33333,q,ok=0;
        st++;

        while (st<n) {
        if (s[st]=='(') n1++,p1[n1]=rot(st);
        if (s[st]=='[') n1++,p1[n1]=dre(st);
                if ((s[st-1]=='('||s[st-1]==','||s[st-1]=='-')&&s[st]>='0'&&s[st]<='9') {
                        ok=0;
                        if (s[st-1]=='-') ok=1;
                        q=0;
                        while (s[st]>='0'&&s[st]<='9') q=q*10+(s[st]-'0'),st++;
                        n1++;
                        if (ok==1) q=q*-1;
                        p1[n1]=q;
                        nr++;
                }
                if (s[st]==')') {
                        m=p1[1];
                        st++;
                        for(t=2; t<=n1; t++) {
                                if (p1[t-1]>0) p1[t]+=p1[t-1];
                                m=max(m,p1[t]);
                        }
                        return m;
                }
                if (s[st]==','||s[st]=='-') st++;
        }
        return 0;
}
int dre(int &st)
{
        int p1[100000],q,n2=0,ok=0;
        st++;
        while (st<n) {

                if (s[st]=='(') n2++,p1[n2]=rot(st);
                if (s[st]=='[') n2++,p1[n2]=dre(st);

                if ((s[st-1]=='['||s[st-1]==','||s[st-1]=='-')&&s[st]>='0'&&s[st]<='9') {
                        ok=0;
                        if (s[st-1]=='-') ok=1;
                        q=0;
                        while (s[st]>='0'&&s[st]<='9') q=q*10+(s[st]-'0'),st++;
                        n2++;
                        if (ok==1) q=q*-1;
                        p1[n2]=q;
                        nr++;
                }
                if (s[st]==']') {
                        st++;
                        sort(p1+1,p1+n2+1);
                        return p1[(n2+1)/2];
                }
                if (s[st]==','||s[st]=='-') st++;
        }
        return 0;
}
int main()
{
        f>>s;
        s+='*';
        n=s.length();

        while (st<n-1) {
                if (s[st]=='(') r+=rot(st);
                else {
                        if (s[st]=='[') r+=dre(st);
                        else {
                                okz=0,w=0;
                                if (s[st]=='-') okz=1,st++;
                                if (s[st]==',') st++;
                                if (s[st]>='0'&&s[st]<='9') {
                                        while (s[st]>='0'&&s[st]<='9') w=w*10+(s[st]-'0'),st++;
                                        if (okz==1) w=w*-1;
                                        r+=w;
                                        nr++;
                                }
                        }
                }
        }
        g<<nr<<'\n'<<r;
        f.close();
        g.close();
        return 0;
}