Submission #69970

#TimeUsernameProblemLanguageResultExecution timeMemory
69970octopusesZalmoxis (BOI18_zalmoxis)C++17
100 / 100
396 ms15088 KiB
//Giorgi Kldiashvili

#include <bits/stdc++.h>

#define ll long long
#define fr first
#define sc second
#define M 1000000007ll

using namespace std;

const int N = 1000020;

int n, k;
int A[N], a[N];
int S, surplus, needed, now;
vector < int > answer;

void go(int x)
{
  if(x == 0)
  {
    answer.push_back(x);
    return;
  }
  if(surplus)
  {
    surplus --;
    go(x - 1);
    go(x - 1);
  } else
    answer.push_back(x);
}

int main()
{
  scanf("%d %d", &n, &k);
  for(int i = 1; i <= n; ++ i)
  {
    scanf("%d", &a[i]);
    A[i] = (1 << a[i]);
  }
  S = A[1];
  needed = 0;
  for(int i = 2; i <= n; ++ i)
  {
    now = A[i] - (S % A[i]);
    if(now == A[i]) now = 0;
    needed += __builtin_popcount(now);
    S += now + A[i];
  }
  now = (1 << 30) - S;
  needed += __builtin_popcount(now);
  surplus = k - needed;
  answer.push_back(a[1]);
  S = A[1];
  for(int i = 2; i <= n; ++ i)
  {
    now = A[i] - (S % A[i]);
    if(now == A[i]) now = 0;
    for(int j = 0; j < 30; ++ j)
      if(now & (1 << j))
        go(j);
    answer.push_back(a[i]);
    S += now + A[i];
  }
  now = (1 << 30) - S;
  for(int j = 0; j < 30; ++ j)
    if(now & (1 << j))
      go(j);
  for(int i = 0; i < answer.size(); ++ i)
    printf("%d ", answer[i]);
}

Compilation message (stderr)

zalmoxis.cpp: In function 'int main()':
zalmoxis.cpp:71:20: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int i = 0; i < answer.size(); ++ i)
                  ~~^~~~~~~~~~~~~~~
zalmoxis.cpp:37:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   scanf("%d %d", &n, &k);
   ~~~~~^~~~~~~~~~~~~~~~~
zalmoxis.cpp:40:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &a[i]);
     ~~~~~^~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...