Cod sursa(job #1652720)

Utilizator TarabanDragosTaraban Dragos-Petru TarabanDragos Data 15 martie 2016 12:27:14
Problema Robotei Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.07 kb
#include<cstdio>
#include<ctime>
#include<cstdlib>
#define INF 2000000000
int p,n,st,dr,i,w,j,p1,p2,vmax,smax,d[2010],d1[2010],v[2010][2010];
long long a,b;
FILE *f,*g;
int maxim(int a,int b){
    if(a>b)
        return a;
    return b;
}
int minim(int a,int b){
    if(a<b)
        return a;
    return b;
}
int main(){
    f=fopen("summax.in","r");
    g=fopen("summax.out","w");
    fscanf(f,"%d%d%d%d",&p,&n,&st,&dr);
    srand(time(0));
    for(i=1;i<=n;i++){
        for(j=1;j<=i;j++){
            //w=rand()% 50;
            //fprintf(g,"%d ",w);
            fscanf(f,"%d",&w);
            if(i!=1){
                p1=j-1;
                p2=j;
                if( d1[p1] > d1[p2] ){
                    v[i][j] = v[i-1][p1];
                    a = d1[p1];
                    b = w;
                    d[j] = a + b;
                }
                else if( d1[p1] < d1[p2] ){
                    v[i][j] = v[i-1][p2];
                    a = d1[p2];
                    b = w;
                    d[j] = a + b;
                }
                else if( d1[p1] == d1[p2] ){
                    a = v[i-1][p1];
                    b = v[i-1][p2];
                    if( a + b > INF )
                        v[i][j] = INF + 1;
                    else
                        v[i][j] = a + b;
                    d[j] = d1[p1] +  w;
                }
            }
        }
        if(i!=1){
            for(j=1;j<=i;j++){
                d1[j] = d[j];
            }
        }
        if(i==1){
            v[1][1]=1;
            d1[1]=w;
        }
        //fprintf(g,"\n");
    }
    for(i=1;i<=n;i++){
        if( d[i] > vmax ){
            vmax = d[i];
            smax = v[n][i];
        }
        else if( d[i] == vmax ){
            a = smax;
            b = v[n][i];
            if( a + b > INF )
                smax = INF + 1;
            else
                smax = a + b;
        }
    }
    if(p==1){
        fprintf(g,"%d",smax);
        return 0;
    }
    /*if(p==2){
        np = dr - st + 1;
        ss = 0;
        for(i=1;i<=n;i++){
            if( d[i] == vmax ){
                if( ss + v[n][i] >=st){
                    for(j=np;j<=np+v[n][i];j++){
                        nr++;
                        if( j >= st && j <= dr ){
                            nr++;
                            calc(n,i);
                        }
                    }
                    a = st - ss;
                    b = dr - ss;
                    for(j=1;j<=minim(b, v[n][j]);j++){
                        s[++nr][n] = i;
                    }
                    a=i;
                    for(j=n;j>1;j--){
                        if( v[j][a] == v[j-1][a] )
                            for(ii=np;ii<=nr;ii++){
                                s[ii][j-1] =
                            }
                    }
                    st == ss;
                }
                ss += v[n][i];
                np += v[n][i];
            }
        }
    }*/
    fclose(f);
    fclose(g);
    return 0;
}