Pagini recente » Cod sursa (job #453187) | Cod sursa (job #1941463) | Cod sursa (job #222240) | Cod sursa (job #917699) | Cod sursa (job #1730550)
#include <cstdio>
#include <fstream>
#include <vector>
class input_reader {
private:
FILE *input_file;
static const int SIZE = 1 << 12;
char Buffer[SIZE]; int Cursor, Sign;
inline void Advance( void ) {
if( ++ Cursor == SIZE ) {
Cursor = 0;
fread( Buffer, SIZE, 1, input_file );
} return;
}
inline char Current( void ) {
return Buffer[Cursor];
}
public:
input_reader() {}
input_reader( const char *file_name ) {
input_file = fopen( file_name, "r" );
fread( Buffer, SIZE, 1, input_file );
Cursor = 0;
}
template <class type>
input_reader &operator >>( type &Value ) {
Value = 0; Sign = 1;
while( Current() < '0' || Current() > '9' ) {
if( Current() == '-' ) Sign = -1;
Advance();
}
while( Current() >= '0' && Current() <= '9' ) {
Value = Value * 10 + ( Current() - '0' ) * Sign;
Advance();
}
return *this;
}
} input_file( "reguli.in" );
std::ofstream output_file( "reguli.out" );
void SolveTestCase( void ) {
int N; long long X, Y, L = 0;
input_file >> N;
std::vector <int> Prefix( N );
std::vector <long long> Array( N );
input_file >> X;
for( int i = 2; i <= N; i ++ ) {
input_file >> Y;
Array[i - 1] = Y - X;
X = Y;
}
N --;
for( int i = 2; i <= N; i ++ ) {
while( L != 0 && Array[i] != Array[L + 1] )
L = Prefix[L];
if( Array[i] == Array[L + 1] )
L ++;
Prefix[i] = L;
}
output_file << N - Prefix[N] << "\n";
for( int i = 1; i <= N - Prefix[N]; i ++ )
output_file << Array[i] << "\n";
return;
}
int main( int argc, const char *argv[] ) {
int T = 1;
for( int i = 1; i <= T; i ++ )
SolveTestCase();
return 0;
}