Pagini recente » Cod sursa (job #3132223) | Cod sursa (job #2311798) | Cod sursa (job #3259358) | Cod sursa (job #480330) | Cod sursa (job #9661)
Cod sursa(job #9661)
#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] );
*/
}