Submission #1068171

#TimeUsernameProblemLanguageResultExecution timeMemory
1068171lollipopCOVID tests (CEOI24_covid)C++17
49.57 / 100
1761 ms344 KiB
#include<bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> #include <ext/rope> #define int long long #define pb push_back #define s second #define f first #define pf push_front #define inf 100000000000000000 #define bitebi __builtin_popcountll #define FOR( i , n ) for( int i = 0 ; i < n ; i ++ ) #define YES cout <<"YES\n" #define NO cout << "NO\n" #define debug cout << "Here Fine" << endl ; #define pr pair < int , int > #define fbo find_by_order // returns iterator #define ook order_of_key // returns strictly less numbers than key using namespace std ; //#pragma GCC optimize("Ofast") //#pragma GCC target("avx,avx2,fma") using namespace __gnu_pbds; using namespace __gnu_cxx; template<class T> using ordered_set =tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update> ; const double Pi=acos(-1.0); const double EPS=1E-8; const int mod = 1000000007 ; const int mod1 = 998244353 ; const int N = 3e5 + 10 ; mt19937 R(time(0)); map < int , int > ma , ma1 ; int n , t , T ; double p ; string s = "" , ans = "" ; char ask( int l , int r ){ for( int i = l ; i <= r ; i ++ ) s[ i ] = '1' ; cout << "Q " << s << endl ; char c ; cin >> c ; for( int i = l ; i <= r ; i ++ ) s[ i ] = '0' ; return c ; } void go( int l , int r ){ int mid = ( l + r ) / 2 ; char c = ask( l , mid ) ; if( c == 'N' ){ go( mid + 1 , r ) ; return ; } if( l == r ){ ans[ l ] = '1' ; return ; } go( l , mid ) ; } void gg( int l , int r ){ for( int i = l ; i <= r ; i ++ ) s[ i ] = '1' ; cout << "Q " << s << endl ; char c ; cin >> c ; for( int i = l ; i <= r ; i ++ ) s[ i ] = '0' ; if( c == 'N' ) return ; if( l == r ){ ans[ l ] = '1' ; return ; } int mid = ( l + r ) / 2 ; gg( l , mid ) ; gg( mid + 1 , r ) ; } void solve(){ FOR( i , n ) s[ i ] = ans[ i ] = '0' ; if( T == 1 ){ FOR( i , n ){ s[ i ] = '1' ; cout << "Q " << s << endl ; s[ i ] = '0' ; char c ; cin >> c ; if( c == 'P' ) ans[ i ] = '1' ; } cout << "A " << ans << endl ; char c ; cin >> c ; if( c == 'W' ) return ; return ; } // else go binary search? pair < int , int > mn = { INT_MAX , -1 } ; int nmb = ( n * p ) + 1 ; for( int i = 1 ; i <= n ; i ++ ){ int cc = 0 , ii = i ; while( ii > 0 ){ cc ++ ; ii /= 2 ; } if( ( cc * nmb + ( ( n + i - 1 ) / i ) ) < mn.f ){ mn.f = cc * nmb + ( ( n + i - 1 ) / i ) ; mn.s = i ; } } int len = mn.s ; int L = 0 , R = n - 1 ; while( true ){ if( L > R ) break ; int l = L , r = L + len ; r = min( n - 1 , r ) ; while( true ){ if( ask( l , r ) == 'N' ) break ; go( l , r ) ; for( int i = l ; i <= r ; i ++ ) if( ans[ i ] == '1' ) l = i + 1 ; if( l > r ) break ; } L = r + 1 ; } cout << "A " << ans << endl ; char c ; cin >> c ; return ; // gg( 0 , n - 1 ) ; // cout << "A " << ans << endl ; // char c ; cin >> c ; } signed main() { ios_base::sync_with_stdio(0),cin.tie(NULL),cout.tie(NULL); cin >> n >> p >> t ; T = t ; FOR( i , n ) s += '0' , ans += '0' ; while( t -- ){ solve() ; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...