Scontri

Nella gara PreOII, ho cercato di risolvere il problema scontri usando una dinamica usando una tecnica simile a quella che serve per risolvere il problema “Somme di sequenze”. Il fatto è che a quanto ho saputo, dei miei amici hanno implementato la stessa idee prendendo 77, mentre io mi sono stampato contro dei WA fin dal primo testcase.

Il codice è questo:

#include <iostream>
#include <algorithm>
#include <math.h>
#include <vector>
#include <string>
#include <utility>
#include <stdio.h>
#include <queue>
#include <fstream>
#include <functional>
#include <cstdlib>
#include <map>
#include <set>
#include <bitset>
#include <string.h>
 
#define MAX_N 5000
#define INF 99999999
#define N_CHAR 130
 
using namespace std;
 
typedef pair<int, int> ii ;
typedef vector< ii >   vii ;
typedef vector<int> vi ;

int N, freccia[MAX_N],memo[MAX_N][MAX_N];

int dp(int start, int end){
    int count = 0;
    if(start >= end)
        return INF;
    if(memo[start][end]!=-1)
        return memo[start][end];
    
    for(int i=start;i<end;i++){
        if(i<(start+end)/2)
            count += abs(freccia[i]-0);
        else
            count +=abs(freccia[i]-1);
    }
    int sol = count;
    for(int i=start+2;i<=end-2;i+=2)
        sol = min(sol, dp(start,i) + dp(i, end));
    //cout <<start<<" "<<end<<" "<<sol<<endl;
    return memo[start][end] = sol;
        
}
int Gira(int N, int *freccia){
    memset(memo,-1,sizeof memo);
    return dp(0,N);
}
/*int main() {
    #ifdef EVAL
        freopen("input.txt","r",stdin);
        freopen("output.txt","r",stdout);
    #endif
        scanf("%d",&N);
        for(int i=0;i<N;i++)
            scanf("%d",freccia+i);
        //memset(memo, -1, sizeof memo);
        printf("%d",Gira(N, freccia));
        
    return 0;
}*/

( http://pastebin.com/BdCUwjnP )

Vedete Bug?

La cosa non mi sorprende, siccome non utilizzi affatto l’array “freccia” che ti viene passato :stuck_out_tongue:

Sparatemi a una gamba…No veramente se faccio una roba del genere a Fisciano mi uccido ahah, che idiota…

Grazie per la risposta, è incredibile ma da solo non me ne sarei mai accorto, il fatto è che stupidamente all’inizio pensavo che il problema dovesse leggere da file di testo e avevo preparato l’impostazione come tale, me ne sono accorto dopo che si doveva implementare la funzione, ma l’array globale è rimasto li :stuck_out_tongue:
è incredibile ma da solo non me ne sarei mai accorto

EmanueleRossi

E' difficile accorgersi di una cosa del genere perché è una banalità fare giusto (uno non pensa mai di sbagliare certe cose xD).

Per Fisciano.. prega hahaha

Era difficile accorgersene soprattutto perché, avendo incluso la main (ovvero il grader) nel file principale (e commentandola al momento della sottoposizione) non riscontravi problemi in locale, ma solo sul server.


Infatti, in locale la main riempiva l’array freccia globale dichiarato da te, mentre sul server la main riempiva un array freccia (non accessibile direttamente da te, se non tramite il parametro della funzione Gira) che non era quello dichiarato da te.

Un modo per accorgersi di questo errore quindi è non includere la main nel file principale, ma usare i grader nel modo corretto :P (così se fallisce sul server fallisce anche in locale).