Submission #1104989

# Submission time Handle Problem Language Result Execution time Memory
1104989 2024-10-25T03:52:33 Z Faggi Sails (IOI07_sails) C++11
Compilation error
0 ms 0 KB
#include <bits/stdc++.h>
#define ll long long
using namespace std;vector<ll> tamDP;  // Máximo permitido por alturavector<ll> calcs;  // Ineficiencia acumuladall tam;  // Altura máxima de los mástiles// Verifica si es posible distribuir las velas con un máximo de 'x' velas por segmento.bool can(vector<ll> dp, ll x) {    for (ll i = tam; i > 0; i--) {        ll ma = min(x, tamDP[i]);  // Máximo permitido en esta altura        if (dp[i] > ma) {  // Si hay más velas que las permitidas en 'x'            ll sob = dp[i] - ma;  // Exceso de velas            dp[i] = ma;            if (i > 1) {                dp[i - 1] += sob;  // Mueve el exceso al siguiente segmento inferior            } else {                return false;  // No es posible distribuirlas correctamente            }        }    }    return true;}// Calcula la ineficiencia total dada una distribución con máximo 'x' velas por segmento.ll calc(vector<ll> dp, ll x) {    ll res = 0;    for (ll i = tam; i > 0; i--) {        ll ma = min(x, tamDP[i]);  // Máximo permitido en esta altura        if (dp[i] > ma) {            ll sob = dp[i] - ma;  // Exceso de velas            dp[i] = ma;            dp[i - 1] += sob;  // Mueve el exceso al siguiente segmento inferior        }        res += calcs[dp[i]];  // Suma la ineficiencia correspondiente    }    return res;}int main() {    ios::sync_with_stdio(false);    cin.tie(nullptr);    ll n;    cin >> n;    // Inicializa la ineficiencia acumulada    calcs.resize(n + 1, 0);    for (ll i = 2; i <= n; i++) {        calcs[i] = calcs[i - 1] + (i - 1);    }    vector<pair<ll, ll>> v(n);  // Altura y número de velas en cada mástil    tam = 0;  // Inicializamos la altura máxima en 0    for (ll i = 0; i < n; i++) {        cin >> v[i].first >> v[i].second;        tam = max(tam, v[i].first);  // Actualizamos la altura máxima    }    // Inicializamos los vectores dp y tamDP    vector<ll> dp(tam + 1, 0);    tamDP.resize(tam + 1, 0);    // Procesamos las velas para cada mástil    for (ll i = 0; i < n; i++) {        dp[v[i].first] += v[i].second;        tamDP[v[i].first]++;    }    // Realizamos acumulación hacia abajo en los vectores dp y tamDP    for (ll i = tam - 1; i >= 0; i--) {        dp[i] += dp[i + 1];        tamDP[i] += tamDP[i + 1];    }    // Búsqueda binaria para encontrar el valor óptimo de 'x'    ll mi = 0, ma = dp[0], pos = ma;    while (mi <= ma) {        ll piv = (mi + ma) / 2;        if (can(dp, piv)) {            pos = piv;  // Intentamos minimizar más el valor            ma = piv - 1;        } else {            mi = piv + 1;        }    }    // Calculamos e imprimimos la ineficiencia mínima    cout << calc(dp, pos) << '\n';    return 0;}

Compilation message

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/10/../../../x86_64-linux-gnu/crt1.o: in function `_start':
(.text+0x24): undefined reference to `main'
collect2: error: ld returned 1 exit status