QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#772810#8965. Jelozhangmj2008100 ✓118ms4004kbC++172.1kb2024-11-22 22:03:402024-11-22 22:03:40

Judging History

This is the latest submission verdict.

  • [2024-11-22 22:03:40]
  • Judged
  • Verdict: 100
  • Time: 118ms
  • Memory: 4004kb
  • [2024-11-22 22:03:40]
  • Submitted

answer

#include <bits/stdc++.h>
using namespace std;

using uint = unsigned int; using i64 = long long; using ui64 = unsigned long long; using i128 = __int128;
const int INF = 1e9; const i64 LLNF = 4e18;

template< class Tp > void chkmax( Tp &x, Tp y ) { x = max( x, y ); }
template< class Tp > void chkmin( Tp &x, Tp y ) { x = min( x, y ); }

int log( int x ) { return 31 - __builtin_clz( x ); }
int log( i64 x ) { return 63 - __builtin_clzll( x ); }

mt19937 rng( 19260817 );
int randint( int l, int r ) { return rng( ) % ( r - l + 1 ) + l; }

vector< int > encode( int m, int x ) { vector< int > u( m ); for( int i = 0; i < m; i ++ ) u[i] = ( x >> i ) & 1; return u; }
int decode( int m, vector< int > u ) { int x = 0; for( int i = 0; i < m; i ++ ) x |= ( u[i] << i ); return x; }

void solve( ) {
	int n; cin >> n;
	int m = n / 2;

	vector< int > mod( m + 1 );
	while( true ) {
		for( int k = 0; k <= m; k ++ ) mod[k] = ( k == m ? 1 : randint( 0, 1 ) );
		bool irr = true;
		for( int x = 2; x < ( 1 << m ); x ++ ) {
			int deg = log( x );
			vector< int > v( deg + 1 ); for( int l = 0; l <= deg; l ++ ) v[l] = ( x >> l ) & 1;
			vector< int > u = mod;
			for( int k = m; k >= deg; k -- ) { int t = u[k]; for( int l = 0; l <= deg; l ++ ) u[k - l] = ( u[k - l] + 2 * 2 - v[l] * t ) % 2; }
			irr &= ( u != vector< int >( m + 1, 0 ) );
		}
		if( irr ) break;
	}

	auto mul = [&] ( int x, int y ) -> int {
		vector< int > u = encode( m, x ), v = encode( m, y );
		vector< int > w( 2 * m - 1 );
		for( int k = 0; k < m; k ++ ) for( int l = 0; l < m; l ++ ) w[k + l] = ( w[k + l] + u[k] * v[l] ) % 2;
		for( int k = 2 * m - 2; k >= m; k -- ) { int t = w[k]; for( int l = 0; l <= m; l ++ ) w[k - l] = ( w[k - l] + 2 * 2 - mod[l] * t ) % 2; }
		int z = decode( m, w );
		return z;
	} ;

	vector< int > ans; for( int x = 0; x < ( 1 << m ); x ++ ) ans.emplace_back( ( mul( x, mul( x, x ) ) << m ) | x );
	cout << ( int ) ans.size( ) << "\n"; for( int x : ans ) cout << x << " "; cout << "\n";
}

int main( ) {
	ios::sync_with_stdio( 0 ), cin.tie( 0 ), cout.tie( 0 );
	int T = 1; while( T -- ) solve( ); return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Subtask #1:

score: 20
Accepted

Test #1:

score: 20
Accepted
time: 2ms
memory: 3636kb

input:

18

output:

512
0 513 4098 7683 32772 43525 61446 54791 146952 175113 224778 258059 114188 66573 36366 14351 215568 92177 123922 248339 231444 98837 83478 213015 101400 212505 156186 56347 151068 54301 114718 218655 174112 43041 66082 200227 220196 95269 38438 176679 165416 5673 27690 192555 29228 182829 194606...

result:

points 1.0 OK, |S| = 512

Subtask #2:

score: 20
Accepted

Test #2:

score: 20
Accepted
time: 2ms
memory: 3588kb

input:

20

output:

1024
0 1025 8194 15363 65540 87045 122886 109575 524296 599049 696330 760843 983052 947213 876558 789519 61456 308241 643090 887827 379924 120853 797718 532503 570392 905241 201754 419867 755740 965661 59422 377887 491552 473121 383010 358435 946212 956453 845862 792615 923688 1015849 966698 999467 ...

result:

points 1.0 OK, |S| = 1024

Subtask #3:

score: 20
Accepted

Test #3:

score: 20
Accepted
time: 18ms
memory: 3644kb

input:

26

output:

8192
0 8193 65538 122883 524292 696325 983046 876551 4194312 4792329 5570570 6086667 7864332 7577613 7012366 6316047 33554448 35790865 38338578 40624147 44564500 42508309 48693270 46620695 62914584 65740825 60620826 62316571 56098844 57778205 50528286 53108767 37928992 46587937 55820322 64430115 704...

result:

points 1.0 OK, |S| = 8192

Subtask #4:

score: 20
Accepted

Test #4:

score: 20
Accepted
time: 43ms
memory: 4004kb

input:

28

output:

16384
0 16385 131074 245763 1048580 1392645 1966086 1753095 8388616 9584649 11141130 12173323 15728652 15155213 14024718 12632079 67108880 71581713 76677138 81248275 89128980 85016597 97386518 93241367 125829144 131481625 121241626 124633115 112197660 115556381 101056542 106217503 255754272 23846915...

result:

points 1.0 OK, |S| = 16384

Subtask #5:

score: 20
Accepted

Test #5:

score: 20
Accepted
time: 118ms
memory: 3804kb

input:

30

output:

32768
0 32769 262146 491523 2097156 2785285 3932166 3506183 16777224 19169289 22282250 24346635 31457292 30310413 28049422 25264143 134217744 143163409 153354258 162496531 178257940 170033173 194773014 186482711 251658264 262963225 242483226 249266203 224395292 231112733 202113054 212434975 23419292...

result:

points 1.0 OK, |S| = 32768