Ho sottomesso questo codice durante le gare, ma ho ottenuto 0/100 


#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>
#include <algorithm>
using namespace std;
ifstream leggi("input.txt");
ofstream scrivi ("output.txt");
int main()
{
string s;
leggi>>s;
long int tot=0;
int x[10]={3,0,0,0,1,1,1,2,2,2};
int y[10]={1,0,1,2,0,1,2,0,1,2};
for(int i=0;i<s.length()-1;i++){
int p1=(int)s.at(i)-'0';
int p2=(int)s.at(i+1)-'0';
tot+=abs(x[p1]-x[p2]);
tot+=abs(y[p1]-y[p2]);
}
tot+=s.length();
scrivi<<tot;
}
Mi sapreste dire dove sbaglio?
Hai considerato che la formica parte sempre da 0 anche se non lo deve premere? Anche noi abbiamo fatto lo stesso errore in gara.
4 Mi Piace
Non ho capito (non mi sono sforzato a capire, mi dispiace) come funziona il tuo codice, ma ti posso spiegare la strategia che il mio gruppo ha adottato nella gara: abbiamo creato un array bidimensionale (o matrice) “int array[4][3];”, che contiene i valori della tastiera, e, ciascun indice nell’array, indica una posizione (ad esempio, array[0][0], contiene “1”, quindi la posizione X di “1” è 0, e lo stesso per la Y). Poi abbiamo considerato che la formica ha una X e una Y (all’inizio: 1, 3), e bisogna contare i salti da fare per raggiungere la posizione X e Y del numero da premere + 1 salto per premere il tasto. I salti da fare sono (X2 - X1) + (Y2 - Y1), dove X2 è maggiore o uguale a X1, e lo stesso per Y2 e Y1. Le X da considerare sono quelle del numero da premere, e la X attuale della formica, lo stesso per la Y. Se hai altre domande, ti invito a chiedere, speialmente perché non credo che io sia stato molto chiaro… del resto, buona fortuna nel risolvere il problema
!