Submission #564831

#TimeUsernameProblemLanguageResultExecution timeMemory
564831mircea_007Rack (eJOI19_rack)C++17
100 / 100
1 ms328 KiB
// This program was written on 19.05.2022
// for problem rack
// by Mircea Rebengiuc

#include <stdio.h>

#define MOD 1000000007
#define INV2 500000004LL

int lgput( int base, int exp ){
  int retval = 1;
  
  while( exp ){
    if( exp & 1 )
      retval = ((long long)retval) * base % MOD;
    
    base = ((long long)base) * base % MOD;
    exp >>= 1;
  }
  
  return retval;
}

int main(){
  int n, ans = 1, p2 = 1;
  long long k;
  
  scanf( "%d%lld", &n, &k );
  k--;
  
  p2 = lgput( 2, n - 1 );
  
  while( k ){
    ans += p2 * (k & 1);
    ans %= MOD;

    p2 = (INV2 * p2) % MOD;
    k >>= 1;
  }
  
  printf( "%d\n", ans );
  
  return 0;
}

Compilation message (stderr)

rack.cpp: In function 'int main()':
rack.cpp:28:8: warning: ignoring return value of 'int scanf(const char*, ...)' declared with attribute 'warn_unused_result' [-Wunused-result]
   28 |   scanf( "%d%lld", &n, &k );
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...