Submission #1203440


Source Code Expand

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <string>
#include <iostream>
#include <stdlib.h>

using namespace std;



int main()
{
  int n;  cin >> n;
  int a[100] ={};
  int i;
  for(int i=0;i<n;i++)
    cin >> a[i];
  int ans;
  int res[230] = {};
  bool flag = false;
  for(ans = n ; ans < 228 ; ans++){

    int used[230] = {};
    int used_n = 0;
    for(i= ans - n ; i < ans ; i++){
      res[i] = a[i - ans + n];
      used[used_n] = res[i];
      used_n++;
    }

    for(i=ans/2 - 1 ; i>=0 ; i--){
      if(i >= ans - n){
        if( res[i*2+1]< res[i] || (i*2+2 < ans && res[i*2+2]< res[i])){
          break;
        }
      }else{
        if( res[i*2+1] == 0 || ( i*2+2 < ans  && res[i*2+2] == 0)){
          break;
        }
        else{
          if(i*2+2 < ans){
            res[i] = min(res[i*2+1],res[i*2+2]) - 1;

            while( res[i]>=0 ){
              bool ok = true;
              for(int k=0;k<used_n;k++){
                if(used[k] == res[i]){
                  ok = false;
                }
              }
              if(!ok){
                res[i]--;
              }else{
                break;
              }
            }
            if(res[i] == -1){
              break;
            }

            used[used_n] = res[i];
            used_n++;


          }
          else{
            res[i] = res[i*2+1] -1;

            while( res[i]>=0 ){
              bool ok = true;
              for(int k=0;k<used_n;k++){
                if(used[k] == res[i]){
                  ok = false;
                }
              }
              if(!ok){
                res[i]--;
              }else{
                break;
              }
            }
            if(res[i] == -1){
              break;
            }
            used[used_n] = res[i];
            used_n++;

          }
        }
      }
      if(i == 0){
        flag = true;
        break;
      }
    }
    if(flag){
      break;
    }
  }

  if(!flag){
    cout << -1 << endl;
  }
  else{
    cout << ans << endl;
  }

  return 0;
}

Submission Info

Submission Time
Task D - 壊れかけのヒープ
User tsunenarazu
Language C++14 (GCC 5.4.1)
Score 0
Code Size 2182 Byte
Status WA
Exec Time 11 ms
Memory 384 KB

Judge Result

Set Name All
Score / Max Score 0 / 100
Status
AC × 30
WA × 3
Set Name Test Cases
All hard-01, hard-02, hard-03, hard-04, hard-05, hard-06, hard-07, hard-08, hard-09, hard-10, hard-11, hard-12, hard-corner-01, hard-corner-02, hard-corner-03, hard-corner-04, hard-corner-05, hard-random-01, hard-random-02, hard-random-03, hard-random-04, hard-random-05, hard-random-06, hard-semirandom-01, hard-semirandom-02, hard-semirandom-03, hard-semirandom-04, hard-semirandom-05, hard-semirandom-06, sample-01, sample-02, sample-03, sample-04
Case Name Status Exec Time Memory
hard-01 AC 1 ms 256 KB
hard-02 AC 1 ms 256 KB
hard-03 AC 1 ms 256 KB
hard-04 AC 1 ms 256 KB
hard-05 WA 1 ms 256 KB
hard-06 WA 1 ms 256 KB
hard-07 AC 1 ms 256 KB
hard-08 AC 1 ms 256 KB
hard-09 AC 11 ms 256 KB
hard-10 AC 1 ms 256 KB
hard-11 AC 4 ms 384 KB
hard-12 AC 1 ms 256 KB
hard-corner-01 AC 1 ms 256 KB
hard-corner-02 AC 1 ms 256 KB
hard-corner-03 AC 1 ms 256 KB
hard-corner-04 AC 1 ms 256 KB
hard-corner-05 WA 2 ms 256 KB
hard-random-01 AC 1 ms 256 KB
hard-random-02 AC 1 ms 256 KB
hard-random-03 AC 1 ms 256 KB
hard-random-04 AC 1 ms 256 KB
hard-random-05 AC 1 ms 256 KB
hard-random-06 AC 1 ms 256 KB
hard-semirandom-01 AC 1 ms 256 KB
hard-semirandom-02 AC 1 ms 256 KB
hard-semirandom-03 AC 1 ms 256 KB
hard-semirandom-04 AC 1 ms 256 KB
hard-semirandom-05 AC 1 ms 256 KB
hard-semirandom-06 AC 1 ms 256 KB
sample-01 AC 1 ms 256 KB
sample-02 AC 1 ms 256 KB
sample-03 AC 1 ms 256 KB
sample-04 AC 1 ms 256 KB