Vorrei imparare a velocizzare i tempi di input e output, per ora conosco solo il fatto di aggiungere queste due righe:
ios_base::sync_with_stdio(false);
cin.tie(NULL);
Conosco anche getc_unlocked() e getchar_unlocked() ma non riesco ad utilizzarli.
Mi potreste dire come funziona e qual è il modo più ottimale per velocizzare l’input e l’output oppure se conoscete un sito abbastanza chiaro dove poterli studiare
Per la maggior parte dei problemi quelle due righe sono più che sufficienti. Se ti serve un input ancora più veloce è molto probabile che la tua soluzione risulti lenta.
Se proprio vuoi usare la fast i/o devi utilizzare quelle due funzioni e fare il parsing carattere per carattere. Occhio che la versione unlocked puoi utilizzarla solo su linux.
Esempio per leggere e scrivere un intero:
inline static int scanInt(){
register int n = 0;
register int neg = 1;
register char c = getchar_unlocked();
if(c == '-')neg = -1;
while(c <'0' || c > '9'){
c = getchar_unlocked();
if(c == '-')neg = -1;
}
while(c >= '0' && c <= '9'){
n= (n << 3) + (n << 1) + c - '0';
c=getchar_unlocked();
}
return n * neg;
}
inline static void writeInt(int v){
static char buf[14];
register int p=0;
if(v==0){
putchar_unlocked('0');
return;
}
if(v < 0){
putchar_unlocked('-');
v = -v;
}
while(v){
buf[p++] = v % 10;
v /= 10;
}
while(p--){
putchar_unlocked(buf[p] + '0');
}
}
Occhio che queste due funzioni non le ho ancora testate, potrebbero essere non corrette
Poi devi dichiarare, a seconda se vuoi input o output
#define NBIN 8000000
#define NBOUT 20
//NBIN e NBOUT variano a seconda della dimensione dell'input e dell'output
unsigned char input[NBIN];
unsigned inputi;
unsigned char output[NBOUT];
unsigned outputi;
Poi scrivere nel main read(0,input,NBIN); ti metterà i primi NBIN caratteri dello standard input in input e scrivere write(1,output,outputi); ti metterà i primi outputi caratteri di output nello standard output, queste due funzioni le richiami all’inizio e alla fine, nel mezzo richiami le macro che sono definite (ovviamente metti solo quelle che ti servono) che ti convertono i caratteri salvati in input in numeri e viceversa.
Farebbe molto comodo se è cosi pigro per non cercare una soluzione più ottimale però comunque utilizzare un minimo di fast input può essere sempre comodo