# SIGKILL misterioso

**URL:** <https://forum.olinfo.it/t/sigkill-misterioso/560>\
**Category:** Aiuto\
**Created:** [29 Marzo 2016, 8:47pm UTC](https://forum.olinfo.it/t/sigkill-misterioso/560 "2016-03-29T20:47:24Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![andreal](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@andreal](https://forum.olinfo.it/u/andreal)\
**Post date:** [29 Marzo 2016, 8:47pm UTC](https://forum.olinfo.it/t/sigkill-misterioso/560/1 "2016-03-29T20:47:24Z")

</div>

Ciao. Ho appena scritto il teorema dei quattro quadrati, tuttavia a parte nei primi due casi di test, il programma riceve un sigkill da linux (nonostante non vado a violare i limiti di memoria). Idee?

```auto
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

int cache[202][4] = {{}};

int calcola(int n, int index, int prev)
{
    //if (cache[n][index] != 0)
    // return cache[n][index]-1;
    int rad = sqrt(n);
    int s = 0;
    if (index == 0)
    {
        if (rad*rad == n)
        {
            if (prev < rad)
                return 0;
            //for (int i=0; i<3-index; i++)
            // cout << " ";
            //cout << rad << endl;
            cache[n][index] = 2;
            return 1;
        }

        else
        {
            cache[n][index] = 1;
            return 0;
        }
    } else {
        for (int i=rad; i>=0; i--)
        {
            if (prev < i)
                continue;
            //for (int i=0; i<3-index; i++)
            // cout << " ";
            //cout << i << endl;

            s += calcola(n-i*i, index-1,i);
        }
        cache[n][index] = s+1;
        return s;
    }

}

int main()
{
    ifstream input("input.txt");
    ofstream output("output.txt");

    int n;
    int t;
    input >> n;
    for (int i=0; i<n; i++)
    {
        input >> t;
        output << calcola(t, 3,t);
        if (i < n-1)
            output << " ";
    }

    return 0;
}

```

---

<div class="post-metadata">

**Author:** ![lucach](https://forum.olinfo.it/user_avatar/forum.olinfo.it/lucach/32/539_2.png) [@lucach](https://forum.olinfo.it/u/lucach)\
**Post date:** [30 Marzo 2016, 2:35pm UTC](https://forum.olinfo.it/t/sigkill-misterioso/560/2 "2016-03-30T14:35:14Z")

</div>

Stai allocando `cache[202][4]`, presumo forte del fatto che N \le 200.  
Il parametro n che riceve la funzione `calcola(n, index, prev)` ha un nome fuorviante: è in realtà uno dei valori che vengono forniti in input (V[i]) che può arrivare fino a 2^{15}.

---

<div class="post-metadata">

**Author:** ![andreal](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@andreal](https://forum.olinfo.it/u/andreal)\
**Post date:** [31 Marzo 2016, 6:27pm UTC](https://forum.olinfo.it/t/sigkill-misterioso/560/3 "2016-03-31T18:27:25Z")

</div>

> [@lucach](#):
>
> forniti in

Perchè ha un nome fuorviante? n è l’input, dopo viene tolto un quadrato n-a² e quindi a² + (nuovo n)

A proposito ma io ti conosco!

---

<div class="post-metadata">

**Author:** ![lucach](https://forum.olinfo.it/user_avatar/forum.olinfo.it/lucach/32/539_2.png) [@lucach](https://forum.olinfo.it/u/lucach)\
**Post date:** [31 Marzo 2016, 6:53pm UTC](https://forum.olinfo.it/t/sigkill-misterioso/560/4 "2016-03-31T18:53:40Z")

</div>

> [@andreal](#):
>
> Perchè ha un nome fuorviante? n è l’input, dopo viene tolto un quadrato n-a² e quindi a² + (nuovo n)

Chiaramente puoi usare la nomenclatura che preferisci per le tue variabili. Provo a essere un po’ più chiaro.

Ricapitoliamo i dati in ingresso del problema: vengono forniti un intero N (non più grande di 200) e N interi, ciascuno dei quali non più grande di 2^{15}.  
Il primo parametro della funzione `calcola` viene usato come indice per la riga della matrice `cache` (composta da 202 righe e 4 colonne).

Osserviamo ora la chiamata nel main `calcola(t, 3,t)`. È evidente che `t` è uno dei valori V[i] e può quindi arrivare fino a 2^{15}. All’interno della funzione tu accedi alla $n-$esima riga della matrice `cache`: essa ha solo 202 righe, ma potenzialmente il tuo “indice di riga” arriva fino a 2^{15}.

Compatibilmente con i limiti di memoria è quindi necessario che innalzi opportunamente il numero di righe della matrice.

> [@andreal](#):
>
> A proposito ma io ti conosco!

Ho tenuto gli incontri in preparazione alle territoriali al Paleocapa 😉

---

<div class="post-metadata">

**Author:** ![andreal](https://forum.olinfo.it/letter_avatar_proxy/v4/letter/a/a4c791/32.png) [@andreal](https://forum.olinfo.it/u/andreal)\
**Post date:** [31 Marzo 2016, 7:13pm UTC](https://forum.olinfo.it/t/sigkill-misterioso/560/5 "2016-03-31T19:13:10Z")

</div>

Ah ok ho capito. Mi sono confuso N(come numero di Vi) e N come intero da processare (quindi ho letto male il testo.

> Ho tenuto gli incontri in preparazione alle territoriali al Paleocapa

ci scommettevo
