QuestionLa multiplication Utilisation au niveau du bit Opérateurs de décalage Giving TLE
Étant donné N et M, écrire une équation à l'aide des opérateurs de décalage gauche dont le résultat sera égal au produit N * M.
Entrée: La première ligne a 0 < T ≤ 50000 indiquant le nombre de cas de test.
Suivant T lignes ont deux entiers 0 < N, M ≤ 10¹⁶.sortie: Pour chaque cas d'essai pour imprimer une équation N * M ressemblant
(N < < p1) + (N < < p2) + ... + (N < < pk) où p1 ≥ p2 ≥ ... ≥ pk et k est le minimum.
SAMPLE INPUT SAMPLE OUTPUT 2 2 1 (2<<0) 2 3 (2<<1) + (2<<0)
Limite de temps: 1,0 sec
Ma solution 1ère approche
int dig = (int)(Math.floor(Math.log10(m)/Math.log10(2))+1);
boolean flag = false;
for(long i = dig; i>=0; --i) {
if(((m>>(i-1l)) & 1l) == 1l) {
if(flag)
System.out.print(" + ("+n+ "<<"+(i-1)+")");
else {
System.out.print("("+n+"<<"+(i-1)+")");
flag = true;
}
}
}
Deuxième approche
boolean[] arr = new boolean[dig];
int i = dig-1;
while(m > 0) {
if((m&1) == 1) {
arr[i] = true;
}
i--;
m = m>>1l;
}
int j = dig-1;
for(i = 0; i < dig; ++i) {
if(arr[i]) {
if(flag)
System.out.print(" + ("+n+"<<"+j+")");
else {
System.out.print("("+n+"<<"+j+")");
flag = true;
}
}
j--;
}
Dans les deux cas que je reçois 5 correcte sur 8 et reste 3 sont TLE pourquoi?
Que signifie «TLE»? –
Limite de temps dépassée. Le temps d'acceptation pour chaque requête est de 1,0 s –
Si c'était * (en utilisant les opérateurs de décalage de gauche, écrire) (une équation) *, il semblerait utiliser 'm >>', et non '<<'. Sans * aucune * indication de ce que 'm' * est *, comment savoir si' m >> 'ne prolonge pas le signe' m's, 'm' n'atteignant jamais 0 avec' la seconde approche '? Cela dit, je ne sais pas pourquoi le 1er devrait TLE - le second devrait obtenir IOOBE. Je ne vois pas vos extraits mettre * des lignes *. Je vois beaucoup de "String add" d'arguments ne changeant pas entre les itérations. – greybeard