Je regardais certaines des solutions de Google Code Jam et certaines personnes ont utilisé des choses que je n'avais jamais vues auparavant. Par exemple,
2LL*r+1LL
Que signifient 2LL et 1LL?
Leurs inclus ressemblent à ceci:
#include <math.h>
#include <algorithm>
#define _USE_MATH_DEFINES
ou
#include <cmath>
LL
rend le littéral entier de type long long
.
Donc 2LL
, est un 2 de type long long
.
Sans LL
, le littéral ne serait que de type int
.
Cela compte quand vous faites des trucs comme ça:
1 << 40
1LL << 40
Avec juste le littéral 1
, (en supposant que int
est de 32 bits, vous passez au-delà de la taille du type entier -> comportement indéfini). Avec 1LL
, vous définissez le type sur long long
avant la main et maintenant il retournera correctement 2 ^ 40.