Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <vector>
- #include <algorithm>
- #include <set>
- using namespace std;
- typedef unsigned long long llint;
- const llint A = 8433437992146984169LL;
- const llint B = 7905438737954111703LL;
- llint pw[256], sum[256];
- llint now, n;
- inline int next() {
- now = A*now + B;
- return int( now>>56 );
- }
- vector< unsigned int > v[10];
- int main( void ) {
- pw[0] = 1, sum[0] = 1;
- for( int i = 1; i < 256; ++i ) {
- pw[i] = pw[i-1]*A;
- sum[i] = sum[i-1] + pw[i];
- }
- scanf( "%llu %llu", &n, &now );
- llint ans = n;
- llint i = 0;
- int x = next();
- while( i < n ) {
- while( i < n && x > 4 ) {
- now = now*pw[x] + B*sum[x-1];
- x = next(), i++;
- }
- if( i >= n ) break;
- unsigned int y = 0;
- for( int j = 0; j < x; ++j )
- y = y*256 + next();
- v[x].push_back( y );
- i++, x = next();
- }
- for( int i = 0; i <= 4; ++i ) {
- sort( v[i].begin(), v[i].end() );
- for( int j = 1; j < v[i].size(); ++j )
- if( v[i][j] == v[i][j-1] ) ans--;
- }
- printf( "%lld\n", ans );
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement