Hex Artifact Content
Not logged in

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.