Cod sursa(job #9661)

Utilizator TabaraTabara Mihai Tabara Data 27 ianuarie 2007 16:35:20
Problema Secventa 5 Scor 0
Compilator cpp Status done
Runda Unirea 2007, clasele 11-12 Marime 2.11 kb
#include <fstream>
using namespace std;

#define in "secv5.in"
#define out "secv5.out"
#define NMAX 1050000

typedef long long int INT;
const long int _INF_ = 229496700;

INT n, l, u;
INT nr[NMAX], nra[NMAX], a[NMAX];
INT nrsol;

void Read();
void Dinamic();
void Write();

FILE *fout = fopen ( out, "w" );

int main()
{
    Read();
    Dinamic();
    Write();
    
    fclose ( fout );
    return 0;
}

void Read()
{
     FILE *fin = fopen ( in, "r" );
     fscanf( fin, "%ld%ld%ld", &n, &l, &u );
     INT i;
     for ( i = 1; i <= n; ++i )
         fscanf( fin, "%ld", &a[i] );
     fclose ( fin );
}

void Dinamic()
{
     INT i, j, tur;
     nrsol = 0;
     //determin secventele care au complet elemente distincte 
     for ( tur = 1; tur <= n; ++tur )
     {
         memset( nr, 0, sizeof( nr ) );
         memset( nra, 0, sizeof( nra ) );
         nr[1] = 1;
         for ( i = 2; i <= n; ++i )
         {
             if ( a[i] != a[i-1] )
             {
                nr[i] = nr[i-1] + 1;
             }
             else nr[i] = 1;
         }
         //determin secventele care nu au neaparat elemente distincte
         nra[1] = 1;
         for ( i = 2; i <= n; ++i )
         {
             nra[i] = 1;
             if ( a[i] == a[i-1] ) nra[i] = nra[i-1];
             if ( a[i] != a[i-1] ) 
             {
                nra[i] = nra[i-1] + 1;
             }
         } 
         for ( i = 1; i <= n; ++i )
         {
             if ( nr[i] >= l && nr[i] <= u ) nrsol++;
             if ( nra[i] >= l && nra[i] <= u ) nrsol++;
         }
         for ( i = 2; i <= n; ++i )
         {
             a[i-1] = a[i];
         }
         n--;
     }//tur
}

void Write()
{
     fprintf ( fout, "%ld\n", nrsol );
     INT i;
     /*for ( i = 1; i <= n; ++i )
     {
         fprintf( fout, "%ld ", nr[i] );
     }
     fprintf( fout, "\n" );
     for ( i = 1; i <= n; ++i )
     {
         fprintf( fout, "%ld ", nra[i] );
     }
     fprintf( fout, "\n" );    
     for ( i = 1; i <= n; ++i )
         fprintf( fout, "%ld ", a[i] );
     */
}