seq.push_back((seq[i-2]+seq[i-1]) % m);
operator<
ищется через ADL. Нельзя определить оператор для чужих типов, и чтобы его подхватили алгоритмы. Предлагаю такое решение: вместо char искать свою структуру (её можно определить просто как struct с char), для которой определить сравнение так же, как ты это сделал с char. return String.Format("{0}/{1}", this.numerator, this.denumerator);
if (numerator < 0 && denumerator < 0)
{
numerator = Math.Abs(numerator);
denumerator = Math.Abs(denumerator);
}
if (denumerator < 0 && denumerator > 0 || denumerator > 0 && numerator < 0)
{
numerator = -Math.Abs(numerator);
denumerator = Math.Abs(denumerator);
}
if (numerator < 0 && denumerator < 0)
{
this.numerator = Math.Abs(numerator);
this.denumerator = Math.Abs(denumerator);
}
if (denumerator < 0 && denumerator > 0 || denumerator > 0 && numerator < 0)
{
this.numerator = -Math.Abs(numerator);
this.denumerator = Math.Abs(denumerator);
}
l = list(range(10**5))
for i in l: # 107 ms
print(i, end=' ')
s = ' '.join(map(str, l))
print(s) # 55 ms
for i in range(n):
left = 1
right = l
...
elif x[m[mid]] == x[i]:
left += 1
...
for i in range(n):
left = 1
right = l
while left <= right:
mid = (left+right) // 2
if x[m[mid]] <= x[i]:
left = mid+1
else:
right = mid-1
...
public List<Node> children = new List<Node>();
In [3]: a = array("I", range(10000))
In [4]: b = list(range(10000))
In [5]: %timeit sum(a)
206 µs ± 6.03 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [6]: %timeit sum(b)
69.3 µs ± 367 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [7]: %timeit a[7777]
49.5 ns ± 0.564 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
In [8]: %timeit b[7777]
33.6 ns ± 0.411 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
0
до 2^(n-1)
и их двоичная запись кодирует знаки.>= S
. Чтобы сразу отсечь проверку вариантов получения 1E9 из всего 1E6 единиц. Эта же проверка имеет смысл в процессе перебора, для оценки, дотянутся ли оставшиеся цифры до оставшейся до S суммы