Cod sursa(job #68935)

Utilizator cos_minBondane Cosmin cos_min Data 30 iunie 2007 11:20:40
Problema P-sir Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;

#define in "psir.in"
#define out "psir.out"
#define dim 2001

int N;
vector<int> P;
unsigned B[dim][dim], C[dim][dim];

int main()
{
    freopen(in,"r",stdin);
    freopen(out,"w",stdout);
    
    scanf("%d", &N);
    
    P.resize(N);
    for ( int i = 0; i < N; i++ )
    {
        scanf("%d", &P[i]);
    }
    
    C[1][1] = 1;
    
    for ( int i = 0; i < N-1; i++ )
        for ( int j = 0; j < N; j++ )
        {
            //if ( i == j ) continue;
            B[i][j] = 1;
        }
    
    
    C[0][0] = B[0][0];
    for ( int j = 1; j < N; j++ )
        C[0][j] = C[0][j-1] + B[j][0];
    
    unsigned G;
    int poz;
    
   /* for ( int i = 1; i < N-1; i++ )
        for ( int j = i+1; j < N; j++ )
            for ( int k = j+1; k <= N; k++ )
            {
                if ( (P[k]-P[i])*(P[k]-P[j]) < 0 ) 
                {
                     B[j][k] += B[i][j];
                }
            }       
             
    unsigned t = 0;
    
    for ( int i = 1; i <= N; i++ )
        for ( int j = 1; j <= N; j++ )
        {
            t += B[i][j];
        }*/
    
    sort(P.begin(),P.end());
    int k;
    
    for ( int i = 0; i < N; i++ )
    {
        for ( int j = i+1; j < N-1; j++ )
        {
            k = j+1;
            while ( P[j] == P[k] && k < N ) k+=1;
            B[i][j] += C[i][N] - C[i][k-1];
        }  
        
        C[i+1][0] = B[i+1][0];
        
        if ( i == N-1 ) continue;
        for ( int j = 1; j <= N; j++ )    
            C[i+1][j] = C[i+1][j-1] + B[j][i+1]; 
            
    }    
    
    unsigned t=0;
    
    for ( int i = 1; i <= N; i++ )
        for ( int j = 1; j <= N; j++ )
        {
            t += B[i][j];
        } 
        
    printf("%u", t);
}