Artifact 893844b7e5ed0726e2e8aec1bc99558deed882c4:
0000: 0a 68 74 74 70 3a 2f 2f 61 70 70 73 2e 74 6f 70 .http://apps.top
0010: 63 6f 64 65 72 2e 63 6f 6d 2f 77 69 6b 69 2f 64 coder.com/wiki/d
0020: 69 73 70 6c 61 79 2f 74 63 2f 53 52 4d 2b 35 31 isplay/tc/SRM+51
0030: 38 0a 0a 0a e4 bb a5 e4 b8 8b e3 81 ae e3 82 88 8...............
0040: e3 81 86 e3 81 aa e9 96 a2 e6 95 b0 e3 82 92 e8 ................
0050: 80 83 e3 81 88 e3 82 8b e3 80 82 0a 0a 69 6e 74 .............int
0060: 5b 5d 20 78 6f 72 5f 63 6f 75 6e 74 28 69 6e 74 [] xor_count(int
0070: 5b 5d 20 61 2c 20 69 6e 74 5b 5d 20 62 2c 20 69 [] a, int[] b, i
0080: 6e 74 20 4e 29 0a 7b 0a 09 69 6e 74 5b 5d 20 63 nt N).{..int[] c
0090: 20 3d 20 7b 30 7d 20 2a 20 4e 3b 0a 09 66 6f 72 = {0} * N;..for
00a0: 28 69 6e 74 20 69 3d 30 3b 20 69 3c 4e 3b 20 2b (int i=0; i<N; +
00b0: 2b 69 29 0a 09 09 66 6f 72 28 69 6e 74 20 6b 3d +i)...for(int k=
00c0: 30 3b 20 6b 3c 4e 3b 20 2b 2b 6b 29 0a 09 09 09 0; k<N; ++k)....
00d0: 63 5b 69 20 5e 20 6b 5d 20 2b 3d 20 61 5b 69 5d c[i ^ k] += a[i]
00e0: 20 2a 20 62 5b 6b 5d 3b 0a 09 72 65 74 75 72 6e * b[k];..return
00f0: 20 63 3b 0a 7d 0a 0a e9 ab 98 e9 80 9f e5 8c 96 c;.}...........
0100: e3 80 82 0a 0a 69 6e 74 5b 5d 20 78 6f 72 5f 63 .....int[] xor_c
0110: 6f 75 6e 74 5f 75 6c 74 72 61 28 69 6e 74 5b 5d ount_ultra(int[]
0120: 20 61 2c 20 69 6e 74 5b 5d 20 62 2c 20 69 6e 74 a, int[] b, int
0130: 20 4e 29 0a 7b 0a 09 61 20 3d 20 78 6f 72 5f 70 N).{..a = xor_p
0140: 72 65 28 61 29 3b 0a 09 62 20 3d 20 78 6f 72 5f re(a);..b = xor_
0150: 70 72 65 28 62 29 3b 0a 09 63 20 3d 20 61 20 2a pre(b);..c = a *
0160: 20 62 3b 20 2f 2f 20 65 6c 65 6d 65 6e 74 2d 77 b; // element-w
0170: 69 73 65 20 70 72 6f 64 75 63 74 0a 09 72 65 74 ise product..ret
0180: 75 72 6e 20 78 6f 72 5f 70 6f 73 74 28 63 29 3b urn xor_post(c);
0190: 0a 7d 0a 0a e3 81 93 e3 81 ae e3 82 88 e3 81 86 .}..............
01a0: e3 81 ab e3 81 aa e3 82 8b e3 83 9e e3 82 b8 e3 ................
01b0: 82 ab e3 83 ab e3 81 aa e5 a4 89 e6 8f 9b 20 78 .............. x
01c0: 6f 72 5f 70 72 65 2c 20 78 6f 72 5f 70 6f 73 74 or_pre, xor_post
01d0: 20 e3 81 8c e5 ad 98 e5 9c a8 e3 81 99 e3 82 8b ...............
01e0: e3 80 82 0a 0a 4e 3d 31 20 e3 81 ae e5 a0 b4 e5 .....N=1 .......
01f0: 90 88 e3 80 81 70 72 65 20 3a 20 7b 78 7d 20 2d .....pre : {x} -
0200: 2d 3e 20 7b 78 7d 0a 4e 3d 32 20 e3 81 ae e5 a0 -> {x}.N=2 .....
0210: b4 e5 90 88 e3 80 81 70 72 65 20 3a 20 7b 78 2c .......pre : {x,
0220: 79 7d 20 2d 2d 3e 20 7b 78 2d 79 2c 20 78 2b 79 y} --> {x-y, x+y
0230: 7d 0a 20 20 78 6f 72 5f 63 6f 75 6e 74 28 20 7b }. xor_count( {
0240: 78 2c 79 7d 2c 20 7b 75 2c 76 7d 20 29 20 3d 20 x,y}, {u,v} ) =
0250: 7b 78 75 2b 79 76 2c 20 79 75 2b 78 76 7d 0a 20 {xu+yv, yu+xv}.
0260: 20 e3 81 a8 20 7b 78 2d 79 2c 20 78 2b 79 7d 20 ... {x-y, x+y}
0270: 2a 20 7b 75 2d 76 2c 20 75 2b 76 7d 20 3d 20 7b * {u-v, u+v} = {
0280: 78 75 2b 79 76 2d 78 75 2d 78 76 2c 20 78 75 2b xu+yv-xu-xv, xu+
0290: 79 76 2b 79 75 2b 78 76 7d 0a 20 20 e3 81 8b e3 yv+yu+xv}. ....
02a0: 82 89 e7 a2 ba e8 aa 8d e3 81 a7 e3 81 8d e3 82 ................
02b0: 8b e3 80 82 0a e4 b8 80 e8 88 ac e3 81 ab 4e e3 ..............N.
02c0: 81 8c 32 e3 81 ae e3 83 99 e3 82 ad e3 81 ae e5 ..2.............
02d0: a0 b4 e5 90 88 e3 80 81 78 6f 72 e3 81 ae e4 bd ........xor.....
02e0: 9c e7 94 a8 e3 81 99 e3 82 8b e3 83 93 e3 83 83 ................
02f0: e3 83 88 e3 81 ae e3 83 91 e3 82 bf e3 83 bc e3 ................
0300: 83 b3 e3 81 8c e5 86 8d e5 b8 b0 e7 9a 84 e3 81 ................
0310: aa e3 81 ae e3 81 a7 0a 20 20 70 72 65 28 20 5b ........ pre( [
0320: 58 2c 59 5d 20 29 20 3d 20 5b 70 72 65 28 58 29 X,Y] ) = [pre(X)
0330: 2d 70 72 65 28 59 29 2c 20 70 72 65 28 58 29 2b -pre(Y), pre(X)+
0340: 70 72 65 28 59 29 5d 0a e3 81 a8 e5 86 8d e5 b8 pre(Y)].........
0350: b0 e7 9a 84 e3 81 ab e3 81 99 e3 82 8c e3 81 b0 ................
0360: e6 88 90 e3 82 8a e7 ab 8b e3 81 a4 0a 0a 0a 0a ................
0370: 0a 0a 0a 78 6f 72 e3 81 a7 e3 81 aa e3 81 8f e3 ...xor..........
0380: 81 a6 e8 b6 b3 e3 81 97 e7 ae 97 e3 81 ae e5 a0 ................
0390: b4 e5 90 88 0a 0a 69 6e 74 5b 5d 20 70 6c 75 73 ......int[] plus
03a0: 5f 63 6f 75 6e 74 28 69 6e 74 5b 5d 20 61 2c 20 _count(int[] a,
03b0: 69 6e 74 5b 5d 20 62 2c 20 69 6e 74 20 4e 29 0a int[] b, int N).
03c0: 7b 0a 09 69 6e 74 5b 5d 20 63 20 3d 20 7b 30 7d {..int[] c = {0}
03d0: 20 2a 20 32 4e 3b 0a 09 66 6f 72 28 69 6e 74 20 * 2N;..for(int
03e0: 69 3d 30 3b 20 69 3c 4e 3b 20 2b 2b 69 29 0a 09 i=0; i<N; ++i)..
03f0: 09 66 6f 72 28 69 6e 74 20 6b 3d 30 3b 20 6b 3c .for(int k=0; k<
0400: 4e 3b 20 2b 2b 6b 29 0a 09 09 09 63 5b 69 20 2b N; ++k)....c[i +
0410: 20 6b 5d 20 2b 3d 20 61 5b 69 5d 20 2a 20 62 5b k] += a[i] * b[
0420: 6b 5d 3b 0a 09 72 65 74 75 72 6e 20 63 3b 0a 7d k];..return c;.}
0430: 0a 0a e3 82 82 e5 90 8c e6 a7 98 e3 81 ab e3 80 ................
0440: 82 0a 0a 69 6e 74 5b 5d 20 70 6c 75 73 5f 63 6f ...int[] plus_co
0450: 75 6e 74 5f 75 6c 74 72 61 28 69 6e 74 5b 5d 20 unt_ultra(int[]
0460: 61 2c 20 69 6e 74 5b 5d 20 62 2c 20 69 6e 74 20 a, int[] b, int
0470: 4e 29 0a 7b 0a 09 61 20 3d 20 70 6c 75 73 5f 70 N).{..a = plus_p
0480: 72 65 28 61 29 3b 0a 09 62 20 3d 20 70 6c 75 73 re(a);..b = plus
0490: 5f 70 72 65 28 62 29 3b 0a 09 63 20 3d 20 61 20 _pre(b);..c = a
04a0: 2a 20 62 3b 20 2f 2f 20 65 6c 65 6d 65 6e 74 2d * b; // element-
04b0: 77 69 73 65 20 70 72 6f 64 75 63 74 0a 09 72 65 wise product..re
04c0: 74 75 72 6e 20 70 6c 75 73 5f 70 6f 73 74 28 63 turn plus_post(c
04d0: 29 3b 0a 7d 0a 0a e3 81 a8 e3 81 a7 e3 81 8d e3 );.}............
04e0: 82 8b e3 81 ae e3 81 8c 20 46 46 54 0a ........ FFT.