Submission #1245086

#TimeUsernameProblemLanguageResultExecution timeMemory
1245086GabrielAliens (IOI16_aliens)C++20
25 / 100
829 ms1114112 KiB
#include "aliens.h"
#include "bits/stdc++.h"
using namespace std;
vector< vector< vector<long long> > > PD;
vector<long long> Posibles, Posici_n_de_la_capa, Costos;
int Algo, m;
long long Resolver(int Cubierto, int Restantes, int Capa){
    if(Restantes < 0) return 2222222222222222;
    if(Capa >= Algo) return 0;
    if(Cubierto == -1){
        long long Menor = 2222222222222222;
        for(int i = 0; i < m; i++){
            if(Posibles[i] >= Costos[Capa]){
                Menor = min(Menor, Resolver(i, Restantes - 1, Capa + 1) + (Posibles[i] - Posici_n_de_la_capa[Capa] + 1) * (Posibles[i] - Posici_n_de_la_capa[Capa] + 1));
            }
        }
        return Menor;
    }
    if(PD[Cubierto][Restantes][Capa] != -2) return PD[Cubierto][Restantes][Capa];
    if(Posibles[Cubierto] >= Costos[Capa]) return PD[Cubierto][Restantes][Capa] = Resolver(Cubierto, Restantes, Capa + 1);
    long long Menor = 2222222222222222;
    int cc = Cubierto;
    long long Resta = 0;
    if(Posici_n_de_la_capa[Capa] <= Posibles[cc]){
        Resta = Posibles[cc] - Posici_n_de_la_capa[Capa] + 1;
        Resta *= Resta;
    }
    for(Cubierto++; Cubierto < m; Cubierto++){
        if(Posibles[Cubierto] >= Costos[Capa]){
            Menor = min(Menor, Resolver(Cubierto, Restantes - 1, Capa + 1) + (Posibles[Cubierto] - Posici_n_de_la_capa[Capa] + 1) * (Posibles[Cubierto] - Posici_n_de_la_capa[Capa] + 1) - Resta);
        }
    }
    return PD[cc][Restantes][Capa] = Menor;
}
long long take_photos(int n, int M, int k, vector<int> r, vector<int> c){
    set<int> Diferentes;
    for(int i = 0; i < n; i++){
        if(r[i] > c[i]) swap(r[i], c[i]);
        Diferentes.insert(r[i]);
    }
    map<int, int> Posiciones;
    Algo = Diferentes.size();
    Posici_n_de_la_capa.assign(Algo, 0);
    int Asignar = 0;
    for(auto E: Diferentes){
        Posiciones[E] = Asignar;
        Posici_n_de_la_capa[Asignar] = E;
        Asignar++;
    }
    Costos.assign(Algo, 0);
    for(int i = 0; i < n; i++){
        Costos[Posiciones[r[i]]] = max((long long)c[i], Costos[Posiciones[r[i]]]);
    }
    Diferentes.clear();
    for(int i = 0; i < n; i++){
        Diferentes.insert(c[i]);
    }
    for(auto E: Diferentes){
        Posibles.push_back(E);
    }
    m = Diferentes.size();
    PD.assign(Posibles.size(), vector< vector<long long> >(k + 1, vector<long long>(Algo, -2)));
    return Resolver(-1, k, 0);
}

Compilation message (stderr)

aliens.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
    1 | #pragma once
      |         ^~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...