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 .