Submission #884151

#TimeUsernameProblemLanguageResultExecution timeMemory
884151LucaIlieSuper Dango Maker (JOI22_dango3)C++17
22 / 100
672 ms832 KiB
#include "dango3.h" #include <bits/stdc++.h> using namespace std; const int MAX_N = 400; const int MAX_M = 25; int pos[MAX_N * MAX_M + 1]; vector<int> v; vector<int> groups[MAX_N]; void insert( int x ) { pos[x] = v.size(); v.push_back( x ); } void erase( int x ) { swap( v[pos[x]], v[v.size() - 1] ); pos[v[pos[x]]] = pos[x]; pos[x] = 0; v.pop_back(); } int query( vector<int> q ) { for ( int x: q ) erase( x ); /*printf( "q " ); for ( int x: q ) printf( "%d ", x ); printf( "\n" );*/ int ans = Query( v ); for ( int x: q ) insert( x ); return ans; } void Solve( int n, int m ) { for ( int i = 1; i <= n * m; i++ ) { pos[i] = i - 1; v.push_back( i ); } int g = 0; for ( int i = 1; i <= n * m; i++ ) { int l = 0, r = g; while ( l != r ) { int mid = (l + r) / 2; vector<int> q; q.push_back( i ); for ( int j = l; j <= mid; j++ ) { if ( !groups[j].empty() ) q.push_back( groups[j].back() ); } if ( query( q ) == m - 2 ) r = mid; else l = mid + 1; } if ( l == g ) g++; groups[l].push_back( i ); } for ( int i = 0; i < m; i++ ) { vector<int> ans; for ( int j = 0; j < n; j++ ) ans.push_back( groups[j][i] ); Answer( ans ); } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...