Hex Artifact Content
Not logged in

Artifact b8cf68d0e0d741f2c58d7185e745b22822ed1f78:


0000: 23 69 6e 63 6c 75 64 65 20 3c 69 6f 73 74 72 65  #include <iostre
0010: 61 6d 3e 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 73  am>..#include <s
0020: 73 74 72 65 61 6d 3e 0d 0a 23 69 6e 63 6c 75 64  stream>..#includ
0030: 65 20 3c 69 6f 6d 61 6e 69 70 3e 0d 0a 23 69 6e  e <iomanip>..#in
0040: 63 6c 75 64 65 20 3c 76 65 63 74 6f 72 3e 0d 0a  clude <vector>..
0050: 23 69 6e 63 6c 75 64 65 20 3c 73 74 72 69 6e 67  #include <string
0060: 3e 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 6d 61 70  >..#include <map
0070: 3e 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 73 65 74  >..#include <set
0080: 3e 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 61 6c 67  >..#include <alg
0090: 6f 72 69 74 68 6d 3e 0d 0a 23 69 6e 63 6c 75 64  orithm>..#includ
00a0: 65 20 3c 6e 75 6d 65 72 69 63 3e 0d 0a 23 69 6e  e <numeric>..#in
00b0: 63 6c 75 64 65 20 3c 69 74 65 72 61 74 6f 72 3e  clude <iterator>
00c0: 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 66 75 6e 63  ..#include <func
00d0: 74 69 6f 6e 61 6c 3e 0d 0a 23 69 6e 63 6c 75 64  tional>..#includ
00e0: 65 20 3c 63 6f 6d 70 6c 65 78 3e 0d 0a 23 69 6e  e <complex>..#in
00f0: 63 6c 75 64 65 20 3c 71 75 65 75 65 3e 0d 0a 23  clude <queue>..#
0100: 69 6e 63 6c 75 64 65 20 3c 73 74 61 63 6b 3e 0d  include <stack>.
0110: 0a 23 69 6e 63 6c 75 64 65 20 3c 63 6d 61 74 68  .#include <cmath
0120: 3e 0d 0a 23 69 6e 63 6c 75 64 65 20 3c 63 61 73  >..#include <cas
0130: 73 65 72 74 3e 0d 0a 23 69 6e 63 6c 75 64 65 20  sert>..#include 
0140: 3c 63 73 74 72 69 6e 67 3e 0d 0a 75 73 69 6e 67  <cstring>..using
0150: 20 6e 61 6d 65 73 70 61 63 65 20 73 74 64 3b 0d   namespace std;.
0160: 0a 74 79 70 65 64 65 66 20 6c 6f 6e 67 20 6c 6f  .typedef long lo
0170: 6e 67 20 4c 4c 3b 0d 0a 74 79 70 65 64 65 66 20  ng LL;..typedef 
0180: 63 6f 6d 70 6c 65 78 3c 64 6f 75 62 6c 65 3e 20  complex<double> 
0190: 43 4d 50 3b 0d 0a 0d 0a 4c 4c 20 73 2c 20 4e 2c  CMP;....LL s, N,
01a0: 20 4b 3b 0d 0a 0d 0a 63 6c 61 73 73 20 50 6c 61   K;....class Pla
01b0: 6e 65 46 72 61 63 74 61 6c 20 7b 0d 0a 70 75 62  neFractal {..pub
01c0: 6c 69 63 3a 0d 0a 09 76 65 63 74 6f 72 20 3c 73  lic:...vector <s
01d0: 74 72 69 6e 67 3e 20 67 65 74 50 61 74 74 65 72  tring> getPatter
01e0: 6e 28 69 6e 74 20 5f 73 2c 20 69 6e 74 20 5f 4e  n(int _s, int _N
01f0: 2c 20 69 6e 74 20 5f 4b 2c 20 69 6e 74 20 72 31  , int _K, int r1
0200: 2c 20 69 6e 74 20 72 32 2c 20 69 6e 74 20 63 31  , int r2, int c1
0210: 2c 20 69 6e 74 20 63 32 29 20 0d 0a 09 7b 0d 0a  , int c2) ...{..
0220: 09 09 73 20 3d 20 5f 73 3b 0d 0a 09 09 4e 20 3d  ..s = _s;....N =
0230: 20 5f 4e 3b 0d 0a 09 09 4b 20 3d 20 5f 4b 3b 0d   _N;....K = _K;.
0240: 0a 0d 0a 09 09 4c 4c 20 4e 73 3d 31 3b 20 66 6f  .....LL Ns=1; fo
0250: 72 28 69 6e 74 20 69 3d 30 3b 20 69 3c 73 2d 31  r(int i=0; i<s-1
0260: 3b 20 2b 2b 69 29 20 4e 73 2a 3d 4e 3b 0d 0a 0d  ; ++i) Ns*=N;...
0270: 0a 09 09 76 65 63 74 6f 72 3c 73 74 72 69 6e 67  ...vector<string
0280: 3e 20 61 6e 73 28 72 32 2d 72 31 2b 31 2c 20 73  > ans(r2-r1+1, s
0290: 74 72 69 6e 67 28 63 32 2d 63 31 2b 31 2c 20 27  tring(c2-c1+1, '
02a0: 30 27 29 29 3b 0d 0a 09 09 66 6f 72 28 69 6e 74  0'));....for(int
02b0: 20 72 3d 72 31 3b 20 72 3c 3d 72 32 3b 20 2b 2b   r=r1; r<=r2; ++
02c0: 72 29 0d 0a 09 09 66 6f 72 28 69 6e 74 20 63 3d  r)....for(int c=
02d0: 63 31 3b 20 63 3c 3d 63 32 3b 20 2b 2b 63 29 0d  c1; c<=c2; ++c).
02e0: 0a 09 09 09 69 66 28 20 73 3e 30 20 26 26 20 62  ....if( s>0 && b
02f0: 6c 61 63 6b 28 72 2c 63 2c 4e 73 29 20 29 0d 0a  lack(r,c,Ns) )..
0300: 09 09 09 09 61 6e 73 5b 72 2d 72 31 5d 5b 63 2d  ....ans[r-r1][c-
0310: 63 31 5d 20 3d 20 27 31 27 3b 0d 0a 09 09 72 65  c1] = '1';....re
0320: 74 75 72 6e 20 61 6e 73 3b 0d 0a 09 7d 0d 0a 0d  turn ans;...}...
0330: 0a 09 62 6f 6f 6c 20 62 6c 61 63 6b 28 69 6e 74  ..bool black(int
0340: 20 79 2c 20 69 6e 74 20 78 2c 20 4c 4c 20 4e 73   y, int x, LL Ns
0350: 29 20 63 6f 6e 73 74 0d 0a 09 7b 0d 0a 09 09 69  ) const...{....i
0360: 66 28 20 4e 73 20 3d 3d 20 30 20 29 0d 0a 09 09  f( Ns == 0 )....
0370: 09 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a  .return false;..
0380: 0d 0a 09 09 69 6e 74 20 59 20 3d 20 79 2f 4e 73  ....int Y = y/Ns
0390: 2c 20 58 20 3d 20 78 2f 4e 73 3b 0d 0a 09 09 79  , X = x/Ns;....y
03a0: 25 3d 4e 73 2c 20 78 25 3d 4e 73 3b 0d 0a 09 09  %=Ns, x%=Ns;....
03b0: 69 66 28 20 28 59 3c 28 4e 2d 4b 29 2f 32 20 7c  if( (Y<(N-K)/2 |
03c0: 7c 20 4e 2d 28 4e 2d 4b 29 2f 32 3c 3d 59 29 20  | N-(N-K)/2<=Y) 
03d0: 7c 7c 20 28 58 3c 28 4e 2d 4b 29 2f 32 20 7c 7c  || (X<(N-K)/2 ||
03e0: 20 4e 2d 28 4e 2d 4b 29 2f 32 3c 3d 58 29 20 29   N-(N-K)/2<=X) )
03f0: 0d 0a 09 09 09 72 65 74 75 72 6e 20 62 6c 61 63  .....return blac
0400: 6b 28 79 2c 20 78 2c 20 4e 73 2f 4e 29 3b 0d 0a  k(y, x, Ns/N);..
0410: 09 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a  ..return true;..
0420: 09 7d 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f 20 42 45 47  .}..};....// BEG
0430: 49 4e 20 43 55 54 20 48 45 52 45 0d 0a 23 69 6e  IN CUT HERE..#in
0440: 63 6c 75 64 65 20 3c 63 74 69 6d 65 3e 0d 0a 64  clude <ctime>..d
0450: 6f 75 62 6c 65 20 73 74 61 72 74 5f 74 69 6d 65  ouble start_time
0460: 3b 73 74 72 69 6e 67 20 74 69 6d 65 72 28 29 20  ;string timer() 
0470: 7b 20 6f 73 74 72 69 6e 67 73 74 72 65 61 6d 20  { ostringstream 
0480: 6f 73 3b 20 6f 73 20 3c 3c 20 22 20 28 22 20 3c  os; os << " (" <
0490: 3c 20 69 6e 74 28 28 63 6c 6f 63 6b 28 29 2d 73  < int((clock()-s
04a0: 74 61 72 74 5f 74 69 6d 65 29 2f 43 4c 4f 43 4b  tart_time)/CLOCK
04b0: 53 5f 50 45 52 5f 53 45 43 2a 31 30 30 30 29 20  S_PER_SEC*1000) 
04c0: 3c 3c 20 22 20 6d 73 65 63 29 22 3b 20 72 65 74  << " msec)"; ret
04d0: 75 72 6e 20 6f 73 2e 73 74 72 28 29 3b 20 7d 0d  urn os.str(); }.
04e0: 0a 0d 0a 74 65 6d 70 6c 61 74 65 20 3c 74 79 70  ...template <typ
04f0: 65 6e 61 6d 65 20 54 3e 20 73 74 72 69 6e 67 20  ename T> string 
0500: 70 72 69 6e 74 5f 61 72 72 61 79 28 63 6f 6e 73  print_array(cons
0510: 74 20 76 65 63 74 6f 72 3c 54 3e 20 26 56 29 20  t vector<T> &V) 
0520: 7b 20 6f 73 74 72 69 6e 67 73 74 72 65 61 6d 20  { ostringstream 
0530: 6f 73 3b 20 6f 73 20 3c 3c 20 22 7b 20 22 3b 20  os; os << "{ "; 
0540: 66 6f 72 20 28 74 79 70 65 6e 61 6d 65 20 76 65  for (typename ve
0550: 63 74 6f 72 3c 54 3e 3a 3a 63 6f 6e 73 74 5f 69  ctor<T>::const_i
0560: 74 65 72 61 74 6f 72 20 69 74 65 72 20 3d 20 56  terator iter = V
0570: 2e 62 65 67 69 6e 28 29 3b 20 69 74 65 72 20 21  .begin(); iter !
0580: 3d 20 56 2e 65 6e 64 28 29 3b 20 2b 2b 69 74 65  = V.end(); ++ite
0590: 72 29 20 6f 73 20 3c 3c 20 27 5c 22 27 20 3c 3c  r) os << '\"' <<
05a0: 20 2a 69 74 65 72 20 3c 3c 20 22 5c 22 2c 22 3b   *iter << "\",";
05b0: 20 6f 73 20 3c 3c 20 22 20 7d 22 3b 20 72 65 74   os << " }"; ret
05c0: 75 72 6e 20 6f 73 2e 73 74 72 28 29 3b 20 7d 0d  urn os.str(); }.
05d0: 0a 69 6e 74 20 76 65 72 69 66 79 5f 63 61 73 65  .int verify_case
05e0: 28 63 6f 6e 73 74 20 76 65 63 74 6f 72 20 3c 73  (const vector <s
05f0: 74 72 69 6e 67 3e 20 26 45 78 70 65 63 74 65 64  tring> &Expected
0600: 2c 20 63 6f 6e 73 74 20 76 65 63 74 6f 72 20 3c  , const vector <
0610: 73 74 72 69 6e 67 3e 20 26 52 65 63 65 69 76 65  string> &Receive
0620: 64 29 20 7b 20 69 66 20 28 45 78 70 65 63 74 65  d) { if (Expecte
0630: 64 20 3d 3d 20 52 65 63 65 69 76 65 64 29 20 63  d == Received) c
0640: 65 72 72 20 3c 3c 20 22 50 41 53 53 45 44 22 20  err << "PASSED" 
0650: 3c 3c 20 74 69 6d 65 72 28 29 20 3c 3c 20 65 6e  << timer() << en
0660: 64 6c 3b 20 65 6c 73 65 20 7b 20 63 65 72 72 20  dl; else { cerr 
0670: 3c 3c 20 22 46 41 49 4c 45 44 22 20 3c 3c 20 74  << "FAILED" << t
0680: 69 6d 65 72 28 29 20 3c 3c 20 65 6e 64 6c 3b 20  imer() << endl; 
0690: 63 65 72 72 20 3c 3c 20 22 5c 74 45 78 70 65 63  cerr << "\tExpec
06a0: 74 65 64 3a 20 22 20 3c 3c 20 70 72 69 6e 74 5f  ted: " << print_
06b0: 61 72 72 61 79 28 45 78 70 65 63 74 65 64 29 20  array(Expected) 
06c0: 3c 3c 20 65 6e 64 6c 3b 20 63 65 72 72 20 3c 3c  << endl; cerr <<
06d0: 20 22 5c 74 52 65 63 65 69 76 65 64 3a 20 22 20   "\tReceived: " 
06e0: 3c 3c 20 70 72 69 6e 74 5f 61 72 72 61 79 28 52  << print_array(R
06f0: 65 63 65 69 76 65 64 29 20 3c 3c 20 65 6e 64 6c  eceived) << endl
0700: 3b 20 7d 20 72 65 74 75 72 6e 20 30 3b 7d 0d 0a  ; } return 0;}..
0710: 0d 0a 74 65 6d 70 6c 61 74 65 3c 69 6e 74 20 4e  ..template<int N
0720: 3e 20 73 74 72 75 63 74 20 43 61 73 65 5f 20 7b  > struct Case_ {
0730: 20 43 61 73 65 5f 28 29 7b 73 74 61 72 74 5f 74   Case_(){start_t
0740: 69 6d 65 3d 63 6c 6f 63 6b 28 29 3b 7d 20 7d 3b  ime=clock();} };
0750: 0d 0a 63 68 61 72 20 54 65 73 74 5f 28 2e 2e 2e  ..char Test_(...
0760: 29 3b 0d 0a 69 6e 74 20 54 65 73 74 5f 28 43 61  );..int Test_(Ca
0770: 73 65 5f 3c 30 3e 29 20 7b 0d 0a 09 69 6e 74 20  se_<0>) {...int 
0780: 73 20 3d 20 31 3b 20 0d 0a 09 69 6e 74 20 4e 20  s = 1; ...int N 
0790: 3d 20 35 3b 20 0d 0a 09 69 6e 74 20 4b 20 3d 20  = 5; ...int K = 
07a0: 33 3b 20 0d 0a 09 69 6e 74 20 72 31 20 3d 20 30  3; ...int r1 = 0
07b0: 3b 20 0d 0a 09 69 6e 74 20 72 32 20 3d 20 34 3b  ; ...int r2 = 4;
07c0: 20 0d 0a 09 69 6e 74 20 63 31 20 3d 20 30 3b 20   ...int c1 = 0; 
07d0: 0d 0a 09 69 6e 74 20 63 32 20 3d 20 34 3b 20 0d  ...int c2 = 4; .
07e0: 0a 09 73 74 72 69 6e 67 20 52 65 74 56 61 6c 5f  ..string RetVal_
07f0: 5b 5d 20 3d 20 7b 22 30 30 30 30 30 22 2c 20 22  [] = {"00000", "
0800: 30 31 31 31 30 22 2c 20 22 30 31 31 31 30 22 2c  01110", "01110",
0810: 20 22 30 31 31 31 30 22 2c 20 22 30 30 30 30 30   "01110", "00000
0820: 22 20 7d 3b 0d 0a 09 20 20 76 65 63 74 6f 72 20  " };...  vector 
0830: 3c 73 74 72 69 6e 67 3e 20 52 65 74 56 61 6c 28  <string> RetVal(
0840: 52 65 74 56 61 6c 5f 2c 20 52 65 74 56 61 6c 5f  RetVal_, RetVal_
0850: 2b 73 69 7a 65 6f 66 28 52 65 74 56 61 6c 5f 29  +sizeof(RetVal_)
0860: 2f 73 69 7a 65 6f 66 28 2a 52 65 74 56 61 6c 5f  /sizeof(*RetVal_
0870: 29 29 3b 20 0d 0a 09 72 65 74 75 72 6e 20 76 65  )); ...return ve
0880: 72 69 66 79 5f 63 61 73 65 28 52 65 74 56 61 6c  rify_case(RetVal
0890: 2c 20 50 6c 61 6e 65 46 72 61 63 74 61 6c 28 29  , PlaneFractal()
08a0: 2e 67 65 74 50 61 74 74 65 72 6e 28 73 2c 20 4e  .getPattern(s, N
08b0: 2c 20 4b 2c 20 72 31 2c 20 72 32 2c 20 63 31 2c  , K, r1, r2, c1,
08c0: 20 63 32 29 29 3b 20 7d 0d 0a 69 6e 74 20 54 65   c2)); }..int Te
08d0: 73 74 5f 28 43 61 73 65 5f 3c 31 3e 29 20 7b 0d  st_(Case_<1>) {.
08e0: 0a 09 69 6e 74 20 73 20 3d 20 32 3b 20 0d 0a 09  ..int s = 2; ...
08f0: 69 6e 74 20 4e 20 3d 20 33 3b 20 0d 0a 09 69 6e  int N = 3; ...in
0900: 74 20 4b 20 3d 20 31 3b 20 0d 0a 09 69 6e 74 20  t K = 1; ...int 
0910: 72 31 20 3d 20 30 3b 20 0d 0a 09 69 6e 74 20 72  r1 = 0; ...int r
0920: 32 20 3d 20 38 3b 20 0d 0a 09 69 6e 74 20 63 31  2 = 8; ...int c1
0930: 20 3d 20 30 3b 20 0d 0a 09 69 6e 74 20 63 32 20   = 0; ...int c2 
0940: 3d 20 38 3b 20 0d 0a 09 73 74 72 69 6e 67 20 52  = 8; ...string R
0950: 65 74 56 61 6c 5f 5b 5d 20 3d 20 7b 22 30 30 30  etVal_[] = {"000
0960: 30 30 30 30 30 30 22 2c 20 22 30 31 30 30 31 30  000000", "010010
0970: 30 31 30 22 2c 20 22 30 30 30 30 30 30 30 30 30  010", "000000000
0980: 22 2c 20 22 30 30 30 31 31 31 30 30 30 22 2c 20  ", "000111000", 
0990: 22 30 31 30 31 31 31 30 31 30 22 2c 20 22 30 30  "010111010", "00
09a0: 30 31 31 31 30 30 30 22 2c 20 22 30 30 30 30 30  0111000", "00000
09b0: 30 30 30 30 22 2c 20 22 30 31 30 30 31 30 30 31  0000", "01001001
09c0: 30 22 2c 20 22 30 30 30 30 30 30 30 30 30 22 20  0", "000000000" 
09d0: 7d 3b 0d 0a 09 20 20 76 65 63 74 6f 72 20 3c 73  };...  vector <s
09e0: 74 72 69 6e 67 3e 20 52 65 74 56 61 6c 28 52 65  tring> RetVal(Re
09f0: 74 56 61 6c 5f 2c 20 52 65 74 56 61 6c 5f 2b 73  tVal_, RetVal_+s
0a00: 69 7a 65 6f 66 28 52 65 74 56 61 6c 5f 29 2f 73  izeof(RetVal_)/s
0a10: 69 7a 65 6f 66 28 2a 52 65 74 56 61 6c 5f 29 29  izeof(*RetVal_))
0a20: 3b 20 0d 0a 09 72 65 74 75 72 6e 20 76 65 72 69  ; ...return veri
0a30: 66 79 5f 63 61 73 65 28 52 65 74 56 61 6c 2c 20  fy_case(RetVal, 
0a40: 50 6c 61 6e 65 46 72 61 63 74 61 6c 28 29 2e 67  PlaneFractal().g
0a50: 65 74 50 61 74 74 65 72 6e 28 73 2c 20 4e 2c 20  etPattern(s, N, 
0a60: 4b 2c 20 72 31 2c 20 72 32 2c 20 63 31 2c 20 63  K, r1, r2, c1, c
0a70: 32 29 29 3b 20 7d 0d 0a 69 6e 74 20 54 65 73 74  2)); }..int Test
0a80: 5f 28 43 61 73 65 5f 3c 32 3e 29 20 7b 0d 0a 09  _(Case_<2>) {...
0a90: 69 6e 74 20 73 20 3d 20 33 3b 20 0d 0a 09 69 6e  int s = 3; ...in
0aa0: 74 20 4e 20 3d 20 33 3b 20 0d 0a 09 69 6e 74 20  t N = 3; ...int 
0ab0: 4b 20 3d 20 31 3b 20 0d 0a 09 69 6e 74 20 72 31  K = 1; ...int r1
0ac0: 20 3d 20 34 3b 20 0d 0a 09 69 6e 74 20 72 32 20   = 4; ...int r2 
0ad0: 3d 20 31 31 3b 20 0d 0a 09 69 6e 74 20 63 31 20  = 11; ...int c1 
0ae0: 3d 20 35 3b 20 0d 0a 09 69 6e 74 20 63 32 20 3d  = 5; ...int c2 =
0af0: 20 31 30 3b 20 0d 0a 09 73 74 72 69 6e 67 20 52   10; ...string R
0b00: 65 74 56 61 6c 5f 5b 5d 20 3d 20 7b 22 31 30 31  etVal_[] = {"101
0b10: 30 30 31 22 2c 20 22 31 30 30 30 30 30 22 2c 20  001", "100000", 
0b20: 22 30 30 30 30 30 30 22 2c 20 22 30 30 31 30 30  "000000", "00100
0b30: 31 22 2c 20 22 30 30 30 30 30 30 22 2c 20 22 30  1", "000000", "0
0b40: 30 30 30 31 31 22 2c 20 22 30 30 31 30 31 31 22  00011", "001011"
0b50: 2c 20 22 30 30 30 30 31 31 22 20 7d 3b 0d 0a 09  , "000011" };...
0b60: 20 20 76 65 63 74 6f 72 20 3c 73 74 72 69 6e 67    vector <string
0b70: 3e 20 52 65 74 56 61 6c 28 52 65 74 56 61 6c 5f  > RetVal(RetVal_
0b80: 2c 20 52 65 74 56 61 6c 5f 2b 73 69 7a 65 6f 66  , RetVal_+sizeof
0b90: 28 52 65 74 56 61 6c 5f 29 2f 73 69 7a 65 6f 66  (RetVal_)/sizeof
0ba0: 28 2a 52 65 74 56 61 6c 5f 29 29 3b 20 0d 0a 09  (*RetVal_)); ...
0bb0: 72 65 74 75 72 6e 20 76 65 72 69 66 79 5f 63 61  return verify_ca
0bc0: 73 65 28 52 65 74 56 61 6c 2c 20 50 6c 61 6e 65  se(RetVal, Plane
0bd0: 46 72 61 63 74 61 6c 28 29 2e 67 65 74 50 61 74  Fractal().getPat
0be0: 74 65 72 6e 28 73 2c 20 4e 2c 20 4b 2c 20 72 31  tern(s, N, K, r1
0bf0: 2c 20 72 32 2c 20 63 31 2c 20 63 32 29 29 3b 20  , r2, c1, c2)); 
0c00: 7d 0d 0a 69 6e 74 20 54 65 73 74 5f 28 43 61 73  }..int Test_(Cas
0c10: 65 5f 3c 33 3e 29 20 7b 0d 0a 09 69 6e 74 20 73  e_<3>) {...int s
0c20: 20 3d 20 32 3b 20 0d 0a 09 69 6e 74 20 4e 20 3d   = 2; ...int N =
0c30: 20 38 3b 20 0d 0a 09 69 6e 74 20 4b 20 3d 20 34   8; ...int K = 4
0c40: 3b 20 0d 0a 09 69 6e 74 20 72 31 20 3d 20 35 36  ; ...int r1 = 56
0c50: 3b 20 0d 0a 09 69 6e 74 20 72 32 20 3d 20 36 31  ; ...int r2 = 61
0c60: 3b 20 0d 0a 09 69 6e 74 20 63 31 20 3d 20 33 33  ; ...int c1 = 33
0c70: 3b 20 0d 0a 09 69 6e 74 20 63 32 20 3d 20 35 36  ; ...int c2 = 56
0c80: 3b 20 0d 0a 09 73 74 72 69 6e 67 20 52 65 74 56  ; ...string RetV
0c90: 61 6c 5f 5b 5d 20 3d 20 7b 22 30 30 30 30 30 30  al_[] = {"000000
0ca0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
0cb0: 30 30 22 2c 20 22 30 30 30 30 30 30 30 30 30 30  00", "0000000000
0cc0: 30 30 30 30 30 30 30 30 30 30 30 30 30 30 22 2c  00000000000000",
0cd0: 20 22 30 31 31 31 31 30 30 30 30 31 31 31 31 30   "01111000011110
0ce0: 30 30 30 31 31 31 31 30 30 30 22 2c 20 22 30 31  0001111000", "01
0cf0: 31 31 31 30 30 30 30 31 31 31 31 30 30 30 30 31  1110000111100001
0d00: 31 31 31 30 30 30 22 2c 20 22 30 31 31 31 31 30  111000", "011110
0d10: 30 30 30 31 31 31 31 30 30 30 30 31 31 31 31 30  0001111000011110
0d20: 30 30 22 2c 20 22 30 31 31 31 31 30 30 30 30 31  00", "0111100001
0d30: 31 31 31 30 30 30 30 31 31 31 31 30 30 30 22 20  11100001111000" 
0d40: 7d 3b 0d 0a 09 20 20 76 65 63 74 6f 72 20 3c 73  };...  vector <s
0d50: 74 72 69 6e 67 3e 20 52 65 74 56 61 6c 28 52 65  tring> RetVal(Re
0d60: 74 56 61 6c 5f 2c 20 52 65 74 56 61 6c 5f 2b 73  tVal_, RetVal_+s
0d70: 69 7a 65 6f 66 28 52 65 74 56 61 6c 5f 29 2f 73  izeof(RetVal_)/s
0d80: 69 7a 65 6f 66 28 2a 52 65 74 56 61 6c 5f 29 29  izeof(*RetVal_))
0d90: 3b 20 0d 0a 09 72 65 74 75 72 6e 20 76 65 72 69  ; ...return veri
0da0: 66 79 5f 63 61 73 65 28 52 65 74 56 61 6c 2c 20  fy_case(RetVal, 
0db0: 50 6c 61 6e 65 46 72 61 63 74 61 6c 28 29 2e 67  PlaneFractal().g
0dc0: 65 74 50 61 74 74 65 72 6e 28 73 2c 20 4e 2c 20  etPattern(s, N, 
0dd0: 4b 2c 20 72 31 2c 20 72 32 2c 20 63 31 2c 20 63  K, r1, r2, c1, c
0de0: 32 29 29 3b 20 7d 0d 0a 0d 0a 74 65 6d 70 6c 61  2)); }....templa
0df0: 74 65 3c 69 6e 74 20 4e 3e 20 76 6f 69 64 20 52  te<int N> void R
0e00: 75 6e 5f 28 29 20 7b 20 63 65 72 72 20 3c 3c 20  un_() { cerr << 
0e10: 22 54 65 73 74 20 43 61 73 65 20 23 22 20 3c 3c  "Test Case #" <<
0e20: 20 4e 20 3c 3c 20 22 2e 2e 2e 22 20 3c 3c 20 66   N << "..." << f
0e30: 6c 75 73 68 3b 20 54 65 73 74 5f 28 43 61 73 65  lush; Test_(Case
0e40: 5f 3c 4e 3e 28 29 29 3b 20 52 75 6e 5f 3c 73 69  _<N>()); Run_<si
0e50: 7a 65 6f 66 28 54 65 73 74 5f 28 43 61 73 65 5f  zeof(Test_(Case_
0e60: 3c 4e 2b 31 3e 28 29 29 29 3d 3d 31 20 3f 20 2d  <N+1>()))==1 ? -
0e70: 31 20 3a 20 4e 2b 31 3e 28 29 3b 20 7d 0d 0a 74  1 : N+1>(); }..t
0e80: 65 6d 70 6c 61 74 65 3c 3e 20 20 20 20 20 20 76  emplate<>      v
0e90: 6f 69 64 20 52 75 6e 5f 3c 2d 31 3e 28 29 20 7b  oid Run_<-1>() {
0ea0: 7d 0d 0a 69 6e 74 20 6d 61 69 6e 28 29 20 7b 20  }..int main() { 
0eb0: 52 75 6e 5f 3c 30 3e 28 29 3b 20 7d 0d 0a 2f 2f  Run_<0>(); }..//
0ec0: 20 45 4e 44 20 43 55 54 20 48 45 52 45 0d 0a 0d   END CUT HERE...
0ed0: 0a                                               .