If you decide in order while decreasing i from i = N, there is nothing particularly difficult.
N = int(input())
a = list(map(int, input().split()))
t = [0] * N
for i in range(N - 1, -1, -1):
t[i] = (sum(t[2 * (i + 1) - 1::i + 1]) % 2) ^ a[i]
print(sum(t))
print(*[i + 1 for i in range(N) if t[i] == 1])
At first glance, it looks like the imos method, but since there is S -0.5, if you use the imos method without thinking about anything, the number of consecutive recordings on the same channel will be two only during 0.5.
The easiest solution is to quit the imos method. If = 1
instead of + = 1
, it's okay to double, and in fact it's okay in terms of processing time.
N, C = map(int, input().split())
tt = [[0] * (10 ** 5 + 1) for _ in range(C)]
for _ in range(N):
s, t, c = map(int, input().split())
for i in range(s - 1, t):
tt[c - 1][i] = 1
ct = [0] * (10 ** 5 + 1)
for i in range(C):
for j in range(10 ** 5 + 1):
ct[j] += tt[i][j]
print(max(ct))
It's not difficult to do with the imos method, but it's surprisingly difficult to write elegantly. Is it easiest to sort and change the movement if it is continuous?
from operator import itemgetter
N, C = map(int, input().split())
stc = [list(map(int, input().split())) for _ in range(N)]
stc.sort(key=itemgetter(2, 0))
cs = [0] * (10 ** 5 + 1)
pt, pc = -1, -1
for s, t, c in stc:
if pt == s and pc == c:
cs[s] += 1
else:
cs[s - 1] += 1
cs[t] -= 1
pt, pc = t, c
for i in range(1, 10 ** 5 + 1):
cs[i] += cs[i - 1]
print(max(cs))
By the way, in theory, it can be moss, but if I was passing through the channel that it would not hit so much, I was sniped firmly. Questioner, as expected …….
f (A, B)
is the same as f (0, A-1) xor f (0, B)
, so g (N) = f (0, N)
, where g
is Just write it. You can count the number of 1 for each digit of the binary number and process it as an even number or an odd number.
def h(A, n):
if A == -1:
return 0
return A // (2 * n) * n + max(A % (2 * n) - (n - 1), 0)
def g(A):
result = 0
for i in range(48):
t = 1 << i
if h(A, t) % 2 == 1:
result += t
return result
def f(A, B):
return g(A - 1) ^ g(B)
A, B = map(int, input().split())
print(f(A, B))
In fact, for any even n
,n xor (n + 1)
is 1
, so there is no need to count for each digit.
def g(A):
t = ((A + 1) // 2) % 2 #N for any even n^ (n + 1) == 1
if A % 2 == 0:
return A ^ t
return t
def f(A, B):
return g(A - 1) ^ g(B)
A, B = map(int, input().split())
print(f(A, B))
For each bit of A, add up the number of standing bits and the number of non-standing bits, and if there are more standing numbers, that bit is 0, and if there are more non-standing numbers, that bit is 1 X. All you have to do is. However, since X has a condition of K or less, if it exceeds K, give up the bit.
N, K = map(int, input().split())
A = list(map(int, input().split()))
bcs = [0] * 41
for i in range(N):
a = A[i]
for j in range(41):
if a & (1 << j) != 0:
bcs[j] += 1
X = 0
for i in range(40, -1, -1):
if bcs[i] >= N - bcs[i]:
continue
t = 1 << i
if X + t <= K:
X += t
result = 0
for i in range(N):
result += X ^ A[i]
print(result)
ABC094D - Binomial Coefficients
a i </ sub> is the maximum number. A j </ sub> is the next largest number, but a i </ sub> </ sub> C < sub> a j </ sub> </ sub> == a i </ sub> </ sub> C a i </ sub> -a j </ sub> </ sub> and look for the order.
n = int(input())
a = list(map(int, input().split()))
a.sort()
x = a[-1]
b = [(min(e, x - e), e) for e in a[:-1]]
b.sort()
print(x, b[-1][1])
Addition is a monotonous increase, but XOR is not a monotonous increase because 1 xor 1 is 0. By the way, since 0 xor N == 0 + N, "XOR <= addition". In other words, the result of XOR is less than the result of addition even once. Then, no matter how much you increase the number of r from there, it will not be the same forever. Also, if a certain l <r has the same value, the combination of l + 1 and r will also have the same value. You can see that the exclusive method is good.
N = int(input())
A = list(map(int, input().split()))
result = 0
r = 0
xs = A[0]
cs = A[0]
for l in range(N):
while r < N - 1 and xs ^ A[r + 1] == cs + A[r + 1]:
r += 1
xs ^= A[r]
cs += A[r]
result += r - l + 1
xs ^= A[l]
cs -= A[l]
print(result)
Recommended Posts