Submission #1203495


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;

  if(n==1){
    cout << 1 << endl;
    return 0;
  }

  long long int a[101] ={};
  int i;
  for(int i=0;i<n;i++)
    cin >> a[i];

  int ans;
  long long int res[240] = {};
  for(ans = n ; ans < 238 ; ans++){
    long long int used[240] = {};
    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(i*2+2 < ans){

          if( res[i*2+1] <= res[i] || res[i*2+2] <= res[i]){
            break;
          }

        }else if(i*2+1 < ans){

          if( res[i*2+1] <= 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){
        cout << ans << endl;
        return 0;
      }
    }
  }

  cout << -1 << endl;

  return 0;
}

Submission Info

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

Judge Result

Set Name All
Score / Max Score 0 / 100
Status
AC × 32
WA × 1
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 AC 1 ms 256 KB
hard-06 AC 1 ms 256 KB
hard-07 AC 1 ms 256 KB
hard-08 AC 1 ms 256 KB
hard-09 AC 9 ms 256 KB
hard-10 AC 1 ms 256 KB
hard-11 AC 4 ms 256 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