QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#772802 | #8965. Jelo | zhangmj2008 | 40 | 265ms | 7348kb | C++17 | 2.3kb | 2024-11-22 21:57:00 | 2024-11-22 21:57:01 |
Judging History
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;
}
Details
Tip: Click on the bar to expand more detailed information
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