QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#772802#8965. Jelozhangmj200840 265ms7348kbC++172.3kb2024-11-22 21:57:002024-11-22 21:57:01

Judging History

This is the latest submission verdict.

  • [2024-11-22 21:57:01]
  • Judged
  • Verdict: 40
  • Time: 265ms
  • Memory: 7348kb
  • [2024-11-22 21:57:00]
  • 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; }

vector< vector< int > > generate_mul( int m ) {
	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;
	}

	int N = 1 << m; vector< vector< int > > mul( N, vector< int >( N ) );
	for( int x = 0; x < N; x ++ ) for( int y = 0; y < N; y ++ ) {
		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 );
		mul[x][y] = z;
	}
	return mul;
}

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

	vector< vector< int > > mul = generate_mul( m );
	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;
}

詳細信息

Subtask #1:

score: 20
Accepted

Test #1:

score: 20
Accepted
time: 58ms
memory: 4924kb

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: 265ms
memory: 7348kb

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: 0
Time Limit Exceeded

Test #3:

score: 0
Time Limit Exceeded

input:

26

output:


result:


Subtask #4:

score: 0
Time Limit Exceeded

Test #4:

score: 0
Time Limit Exceeded

input:

28

output:


result:


Subtask #5:

score: 0
Time Limit Exceeded

Test #5:

score: 0
Time Limit Exceeded

input:

30

output:


result: