Submission #8088181


Source Code Expand

local mma = math.max
local mfl = math.floor
local mod = 1000000007
local function bmul(x, y)
  local x0, y0 = x % 31623, y % 31623
  local x1, y1 = mfl(x / 31623), mfl(y / 31623)
  return (x1 * y1 * 14122 + (x1 * y0 + x0 * y1) * 31623 + x0 * y0) % mod
end
local function badd(x, y)
  return (x + y) % mod
end
local function getxor(x, y)
  local ret = 0
  local mul = 1
  while 0 < x or 0 < y do
    if (x % 2) + (y % 2) == 1 then
      ret = ret + mul
    end
    x, y, mul = mfl(x / 2), mfl(y / 2), mul * 2
  end
  return ret
end

local n, k = io.read("*n", "*n")
local lower = {}
local higher = {}
for i = 1, n do
  local a = io.read("*n")
  if a < 4096 then
    table.insert(lower, a)
  else
    table.insert(higher, a)
  end
end
local lowmax = 0
for i = 1, #lower do
  lowmax = mma(lowmax, lower[i])
end
local dp1, dp2 = {}, {}
for i = 1, 131072 do
  dp1[i] = 0
end
dp1[1] = 1
for ic = 1, #higher do
  for i = 1, 131072 do
    dp2[i] = 0
  end
  local v = higher[ic]
  for src = 0, 131071 do
    local dst = getxor(src, v)
    dp2[dst + 1] = dp1[src + 1]
  end
  for i = 1, 131072 do
    dp1[i] = badd(dp1[i], dp2[i])
  end
end
local xors = {}
for i = 1, 2048 do
  xors[i] = {}
  for j = 1, i - 1 do
    xors[i][j] = getxor(i - 1, j - 1)
  end
  xors[i][i] = 0
end
for i = 1, 2048 do
  for j = i + 1, 2048 do
    xors[i][j] = xors[j][i]
  end
  for j = 2049, 4096 do
    xors[i][j] = xors[i][j - 2048] + 2048
  end
end
for i = 2049, 4096 do
  xors[i] = {}
  for j = 1, 2048 do
    xors[i][j] = xors[i - 2048][j] + 2048
  end
  for j = 2049, 4096 do
    xors[i][j] = xors[i - 2048][j - 2048]
  end
end
-- print(os.clock())
-- os.exit()
local lowmax2 = 1
while lowmax2 < lowmax do
  lowmax2 = lowmax2 * 2
end
if k < 4096 then
  for ic = 1, #lower do
    for i = 1, lowmax2 do
      dp2[i] = 0
    end
    local v = lower[ic]
    for src = 0, lowmax2 - 1 do
      local dst = xors[src + 1][v + 1]
      dp2[dst + 1] = dp1[src + 1]
    end
    for i = 1, lowmax2 do
      dp1[i] = badd(dp1[i], dp2[i])
    end
  end
  print(dp1[k + 1])
else
  for i = 1, lowmax2 do
    dp1[i] = 0
  end
  dp1[1] = 1
  for ic = 1, #lower do
    for i = 1, lowmax2 do
      dp2[i] = 0
    end
    local v = lower[ic]
    for src = 0, lowmax2 - 1 do
      local dst = xors[src + 1][v + 1]
      dp2[dst + 1] = dp1[src + 1]
    end
    for i = 1, lowmax2 do
      dp1[i] = badd(dp1[i], dp2[i])
    end
  end
  local ret = 0
  for lowpos = 1, lowmax2 do
    local highpos = getxor(k, lowpos - 1) + 1
    ret = badd(ret, bmul(dp1[lowpos], dp1[highpos]))
  end
  print(ret)
end

Submission Info

Submission Time
Task F - Limited Xor Subset
User obakyan
Language LuaJIT (2.0.4)
Score 0
Code Size 2681 Byte
Status WA
Exec Time 1027 ms
Memory 139644 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 0 / 500
Status
AC × 1
WA × 2
AC × 24
WA × 9
Set Name Test Cases
Sample sample_01.txt, sample_02.txt, sample_03.txt
All sample_01.txt, sample_02.txt, sample_03.txt, subtask_1_1.txt, subtask_1_10.txt, subtask_1_11.txt, subtask_1_12.txt, subtask_1_13.txt, subtask_1_14.txt, subtask_1_15.txt, subtask_1_16.txt, subtask_1_17.txt, subtask_1_18.txt, subtask_1_19.txt, subtask_1_2.txt, subtask_1_20.txt, subtask_1_21.txt, subtask_1_22.txt, subtask_1_23.txt, subtask_1_24.txt, subtask_1_25.txt, subtask_1_26.txt, subtask_1_27.txt, subtask_1_28.txt, subtask_1_29.txt, subtask_1_3.txt, subtask_1_30.txt, subtask_1_4.txt, subtask_1_5.txt, subtask_1_6.txt, subtask_1_7.txt, subtask_1_8.txt, subtask_1_9.txt
Case Name Status Exec Time Memory
sample_01.txt WA 474 ms 137728 KB
sample_02.txt WA 474 ms 137728 KB
sample_03.txt AC 475 ms 137728 KB
subtask_1_1.txt AC 593 ms 138368 KB
subtask_1_10.txt AC 543 ms 138624 KB
subtask_1_11.txt AC 543 ms 138620 KB
subtask_1_12.txt AC 515 ms 138620 KB
subtask_1_13.txt AC 532 ms 138496 KB
subtask_1_14.txt AC 542 ms 138624 KB
subtask_1_15.txt AC 555 ms 138368 KB
subtask_1_16.txt AC 520 ms 138496 KB
subtask_1_17.txt AC 493 ms 138496 KB
subtask_1_18.txt WA 527 ms 139644 KB
subtask_1_19.txt WA 518 ms 139136 KB
subtask_1_2.txt AC 596 ms 138624 KB
subtask_1_20.txt AC 476 ms 137600 KB
subtask_1_21.txt AC 476 ms 137472 KB
subtask_1_22.txt WA 474 ms 137600 KB
subtask_1_23.txt AC 490 ms 138624 KB
subtask_1_24.txt AC 492 ms 138752 KB
subtask_1_25.txt WA 1027 ms 138880 KB
subtask_1_26.txt AC 476 ms 137600 KB
subtask_1_27.txt AC 491 ms 138496 KB
subtask_1_28.txt AC 538 ms 138368 KB
subtask_1_29.txt WA 510 ms 138496 KB
subtask_1_3.txt AC 577 ms 138624 KB
subtask_1_30.txt AC 546 ms 138624 KB
subtask_1_4.txt AC 546 ms 139008 KB
subtask_1_5.txt AC 564 ms 138368 KB
subtask_1_6.txt WA 1006 ms 138240 KB
subtask_1_7.txt WA 473 ms 137856 KB
subtask_1_8.txt AC 474 ms 137728 KB
subtask_1_9.txt AC 474 ms 137600 KB