Hex Artifact Content
Not logged in

Artifact db13cb4122e4e0d1a4b96ccdbecf829d112f8a4a:


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 74 75 70 6c 65 3e 0d 0a 75 73 69 6e 67 20 6e  <tuple>..using n
0150: 61 6d 65 73 70 61 63 65 20 73 74 64 3b 0d 0a 74  amespace std;..t
0160: 79 70 65 64 65 66 20 6c 6f 6e 67 20 6c 6f 6e 67  ypedef long long
0170: 20 4c 4c 3b 0d 0a 74 79 70 65 64 65 66 20 63 6f   LL;..typedef co
0180: 6d 70 6c 65 78 3c 64 6f 75 62 6c 65 3e 20 43 4d  mplex<double> CM
0190: 50 3b 0d 0a 0d 0a 63 6c 61 73 73 20 54 61 72 6f  P;....class Taro
01a0: 4a 69 72 6f 47 72 69 64 20 7b 20 70 75 62 6c 69  JiroGrid { publi
01b0: 63 3a 0d 0a 09 69 6e 74 20 67 65 74 4e 75 6d 62  c:...int getNumb
01c0: 65 72 28 76 65 63 74 6f 72 20 3c 73 74 72 69 6e  er(vector <strin
01d0: 67 3e 20 67 72 69 64 29 0d 0a 09 7b 0d 0a 09 09  g> grid)...{....
01e0: 63 6f 6e 73 74 20 69 6e 74 20 48 20 3d 20 67 72  const int H = gr
01f0: 69 64 2e 73 69 7a 65 28 29 3b 0d 0a 09 09 63 6f  id.size();....co
0200: 6e 73 74 20 69 6e 74 20 57 20 3d 20 67 72 69 64  nst int W = grid
0210: 5b 30 5d 2e 73 69 7a 65 28 29 3b 0d 0a 09 09 63  [0].size();....c
0220: 6f 6e 73 74 20 73 74 72 69 6e 67 20 43 68 61 6e  onst string Chan
0230: 67 65 5b 32 5d 20 3d 20 7b 73 74 72 69 6e 67 28  ge[2] = {string(
0240: 57 2c 20 27 42 27 29 2c 20 73 74 72 69 6e 67 28  W, 'B'), string(
0250: 57 2c 20 27 57 27 29 7d 3b 0d 0a 0d 0a 09 09 2f  W, 'W')};....../
0260: 2f 20 30 0d 0a 09 09 69 66 28 6f 6b 28 67 72 69  / 0....if(ok(gri
0270: 64 29 29 0d 0a 09 09 09 72 65 74 75 72 6e 20 30  d)).....return 0
0280: 3b 0d 0a 09 09 2f 2f 20 31 0d 0a 09 09 66 6f 72  ;....// 1....for
0290: 28 69 6e 74 20 79 31 3d 30 3b 20 79 31 3c 48 3b  (int y1=0; y1<H;
02a0: 20 2b 2b 79 31 29 20 66 6f 72 28 69 6e 74 20 63   ++y1) for(int c
02b0: 31 3d 30 3b 20 63 31 3c 32 3b 20 2b 2b 63 31 29  1=0; c1<2; ++c1)
02c0: 20 7b 0d 0a 09 09 09 61 75 74 6f 20 74 31 20 3d   {.....auto t1 =
02d0: 20 67 72 69 64 5b 79 31 5d 3b 0d 0a 09 09 09 67   grid[y1];.....g
02e0: 72 69 64 5b 79 31 5d 20 3d 20 43 68 61 6e 67 65  rid[y1] = Change
02f0: 5b 63 31 5d 3b 0d 0a 09 09 09 69 66 28 6f 6b 28  [c1];.....if(ok(
0300: 67 72 69 64 29 29 20 72 65 74 75 72 6e 20 31 3b  grid)) return 1;
0310: 0d 0a 09 09 09 67 72 69 64 5b 79 31 5d 20 3d 20  .....grid[y1] = 
0320: 74 31 3b 0d 0a 09 09 7d 0d 0a 09 09 72 65 74 75  t1;....}....retu
0330: 72 6e 20 32 3b 0d 0a 09 7d 0d 0a 0d 0a 09 62 6f  rn 2;...}.....bo
0340: 6f 6c 20 6f 6b 28 63 6f 6e 73 74 20 76 65 63 74  ol ok(const vect
0350: 6f 72 3c 73 74 72 69 6e 67 3e 26 20 67 29 0d 0a  or<string>& g)..
0360: 09 7b 0d 0a 09 09 63 6f 6e 73 74 20 69 6e 74 20  .{....const int 
0370: 48 20 3d 20 67 2e 73 69 7a 65 28 29 3b 0d 0a 09  H = g.size();...
0380: 09 63 6f 6e 73 74 20 69 6e 74 20 57 20 3d 20 67  .const int W = g
0390: 5b 30 5d 2e 73 69 7a 65 28 29 3b 0d 0a 09 09 66  [0].size();....f
03a0: 6f 72 28 69 6e 74 20 78 3d 30 3b 20 78 3c 57 3b  or(int x=0; x<W;
03b0: 20 2b 2b 78 29 20 7b 0d 0a 09 09 09 69 6e 74 20   ++x) {.....int 
03c0: 6e 62 3d 30 2c 20 6e 77 3d 30 3b 0d 0a 09 09 09  nb=0, nw=0;.....
03d0: 66 6f 72 28 69 6e 74 20 79 3d 30 3b 20 79 3c 48  for(int y=0; y<H
03e0: 3b 20 2b 2b 79 29 0d 0a 09 09 09 7b 0d 0a 09 09  ; ++y).....{....
03f0: 09 09 69 66 28 67 5b 79 5d 5b 78 5d 3d 3d 27 42  ..if(g[y][x]=='B
0400: 27 29 20 6e 62 2b 2b 2c 20 6e 77 3d 30 3b 0d 0a  ') nb++, nw=0;..
0410: 09 09 09 09 65 6c 73 65 20 6e 62 3d 30 2c 20 6e  ....else nb=0, n
0420: 77 2b 2b 3b 0d 0a 09 09 09 09 69 66 28 6e 77 3e  w++;......if(nw>
0430: 48 2f 32 20 7c 7c 20 6e 62 3e 48 2f 32 29 0d 0a  H/2 || nb>H/2)..
0440: 09 09 09 09 09 72 65 74 75 72 6e 20 66 61 6c 73  .....return fals
0450: 65 3b 0d 0a 09 09 09 7d 0d 0a 09 09 7d 0d 0a 09  e;.....}....}...
0460: 09 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 09  .return true;...
0470: 7d 0d 0a 7d 3b 0d 0a 0d 0a 2f 2f 20 42 45 47 49  }..};....// BEGI
0480: 4e 20 43 55 54 20 48 45 52 45 0d 0a 23 69 6e 63  N CUT HERE..#inc
0490: 6c 75 64 65 20 3c 63 74 69 6d 65 3e 0d 0a 64 6f  lude <ctime>..do
04a0: 75 62 6c 65 20 73 74 61 72 74 5f 74 69 6d 65 3b  uble start_time;
04b0: 20 73 74 72 69 6e 67 20 74 69 6d 65 72 28 29 0d   string timer().
04c0: 0a 20 7b 20 6f 73 74 72 69 6e 67 73 74 72 65 61  . { ostringstrea
04d0: 6d 20 6f 73 3b 20 6f 73 20 3c 3c 20 22 20 28 22  m os; os << " ("
04e0: 20 3c 3c 20 69 6e 74 28 28 63 6c 6f 63 6b 28 29   << int((clock()
04f0: 2d 73 74 61 72 74 5f 74 69 6d 65 29 2f 43 4c 4f  -start_time)/CLO
0500: 43 4b 53 5f 50 45 52 5f 53 45 43 2a 31 30 30 30  CKS_PER_SEC*1000
0510: 29 20 3c 3c 20 22 20 6d 73 65 63 29 22 3b 20 72  ) << " msec)"; r
0520: 65 74 75 72 6e 20 6f 73 2e 73 74 72 28 29 3b 20  eturn os.str(); 
0530: 7d 0d 0a 74 65 6d 70 6c 61 74 65 3c 74 79 70 65  }..template<type
0540: 6e 61 6d 65 20 54 3e 20 6f 73 74 72 65 61 6d 26  name T> ostream&
0550: 20 6f 70 65 72 61 74 6f 72 3c 3c 28 6f 73 74 72   operator<<(ostr
0560: 65 61 6d 26 20 6f 73 2c 20 63 6f 6e 73 74 20 76  eam& os, const v
0570: 65 63 74 6f 72 3c 54 3e 26 20 76 29 0d 0a 20 7b  ector<T>& v).. {
0580: 20 6f 73 20 3c 3c 20 22 7b 20 22 3b 0d 0a 20 20   os << "{ ";..  
0590: 20 66 6f 72 28 74 79 70 65 6e 61 6d 65 20 76 65   for(typename ve
05a0: 63 74 6f 72 3c 54 3e 3a 3a 63 6f 6e 73 74 5f 69  ctor<T>::const_i
05b0: 74 65 72 61 74 6f 72 20 69 74 3d 76 2e 62 65 67  terator it=v.beg
05c0: 69 6e 28 29 3b 20 69 74 21 3d 76 2e 65 6e 64 28  in(); it!=v.end(
05d0: 29 3b 20 2b 2b 69 74 29 0d 0a 20 20 20 6f 73 20  ); ++it)..   os 
05e0: 3c 3c 20 27 5c 22 27 20 3c 3c 20 2a 69 74 20 3c  << '\"' << *it <
05f0: 3c 20 27 5c 22 27 20 3c 3c 20 28 69 74 2b 31 3d  < '\"' << (it+1=
0600: 3d 76 2e 65 6e 64 28 29 20 3f 20 22 22 20 3a 20  =v.end() ? "" : 
0610: 22 2c 20 22 29 3b 20 6f 73 20 3c 3c 20 22 20 7d  ", "); os << " }
0620: 22 3b 20 72 65 74 75 72 6e 20 6f 73 3b 20 7d 0d  "; return os; }.
0630: 0a 76 6f 69 64 20 76 65 72 69 66 79 5f 63 61 73  .void verify_cas
0640: 65 28 63 6f 6e 73 74 20 69 6e 74 26 20 45 78 70  e(const int& Exp
0650: 65 63 74 65 64 2c 20 63 6f 6e 73 74 20 69 6e 74  ected, const int
0660: 26 20 52 65 63 65 69 76 65 64 29 20 7b 0d 0a 20  & Received) {.. 
0670: 62 6f 6f 6c 20 6f 6b 20 3d 20 28 45 78 70 65 63  bool ok = (Expec
0680: 74 65 64 20 3d 3d 20 52 65 63 65 69 76 65 64 29  ted == Received)
0690: 3b 0d 0a 20 69 66 28 6f 6b 29 20 63 65 72 72 20  ;.. if(ok) cerr 
06a0: 3c 3c 20 22 50 41 53 53 45 44 22 20 3c 3c 20 74  << "PASSED" << t
06b0: 69 6d 65 72 28 29 20 3c 3c 20 65 6e 64 6c 3b 20  imer() << endl; 
06c0: 20 65 6c 73 65 20 7b 20 63 65 72 72 20 3c 3c 20   else { cerr << 
06d0: 22 46 41 49 4c 45 44 22 20 3c 3c 20 74 69 6d 65  "FAILED" << time
06e0: 72 28 29 20 3c 3c 20 65 6e 64 6c 3b 0d 0a 20 63  r() << endl;.. c
06f0: 65 72 72 20 3c 3c 20 22 5c 74 6f 3a 20 5c 22 22  err << "\to: \""
0700: 20 3c 3c 20 45 78 70 65 63 74 65 64 20 3c 3c 20   << Expected << 
0710: 27 5c 22 27 20 3c 3c 20 65 6e 64 6c 20 3c 3c 20  '\"' << endl << 
0720: 22 5c 74 78 3a 20 5c 22 22 20 3c 3c 20 52 65 63  "\tx: \"" << Rec
0730: 65 69 76 65 64 20 3c 3c 20 27 5c 22 27 20 3c 3c  eived << '\"' <<
0740: 20 65 6e 64 6c 3b 20 7d 20 7d 0d 0a 23 64 65 66   endl; } }..#def
0750: 69 6e 65 20 43 41 53 45 28 4e 29 20 7b 63 65 72  ine CASE(N) {cer
0760: 72 20 3c 3c 20 22 54 65 73 74 20 43 61 73 65 20  r << "Test Case 
0770: 23 22 20 3c 3c 20 4e 20 3c 3c 20 22 2e 2e 2e 22  #" << N << "..."
0780: 20 3c 3c 20 66 6c 75 73 68 3b 20 73 74 61 72 74   << flush; start
0790: 5f 74 69 6d 65 3d 63 6c 6f 63 6b 28 29 3b 0d 0a  _time=clock();..
07a0: 23 64 65 66 69 6e 65 20 45 4e 44 09 20 76 65 72  #define END. ver
07b0: 69 66 79 5f 63 61 73 65 28 5f 2c 20 54 61 72 6f  ify_case(_, Taro
07c0: 4a 69 72 6f 47 72 69 64 28 29 2e 67 65 74 4e 75  JiroGrid().getNu
07d0: 6d 62 65 72 28 67 72 69 64 29 29 3b 7d 0d 0a 69  mber(grid));}..i
07e0: 6e 74 20 6d 61 69 6e 28 29 7b 0d 0a 0d 0a 43 41  nt main(){....CA
07f0: 53 45 28 30 29 0d 0a 09 73 74 72 69 6e 67 20 67  SE(0)...string g
0800: 72 69 64 5f 5b 5d 20 3d 20 7b 22 57 42 22 2c 0d  rid_[] = {"WB",.
0810: 0a 20 22 42 42 22 7d 3b 0d 0a 09 20 20 76 65 63  . "BB"};...  vec
0820: 74 6f 72 20 3c 73 74 72 69 6e 67 3e 20 67 72 69  tor <string> gri
0830: 64 28 67 72 69 64 5f 2c 20 67 72 69 64 5f 2b 73  d(grid_, grid_+s
0840: 69 7a 65 6f 66 28 67 72 69 64 5f 29 2f 73 69 7a  izeof(grid_)/siz
0850: 65 6f 66 28 2a 67 72 69 64 5f 29 29 3b 20 0d 0a  eof(*grid_)); ..
0860: 09 69 6e 74 20 5f 20 3d 20 31 3b 20 0d 0a 45 4e  .int _ = 1; ..EN
0870: 44 0d 0a 43 41 53 45 28 31 29 0d 0a 09 73 74 72  D..CASE(1)...str
0880: 69 6e 67 20 67 72 69 64 5f 5b 5d 20 3d 20 7b 22  ing grid_[] = {"
0890: 57 42 22 2c 0d 0a 20 22 57 57 22 7d 3b 0d 0a 09  WB",.. "WW"};...
08a0: 20 20 76 65 63 74 6f 72 20 3c 73 74 72 69 6e 67    vector <string
08b0: 3e 20 67 72 69 64 28 67 72 69 64 5f 2c 20 67 72  > grid(grid_, gr
08c0: 69 64 5f 2b 73 69 7a 65 6f 66 28 67 72 69 64 5f  id_+sizeof(grid_
08d0: 29 2f 73 69 7a 65 6f 66 28 2a 67 72 69 64 5f 29  )/sizeof(*grid_)
08e0: 29 3b 20 0d 0a 09 69 6e 74 20 5f 20 3d 20 31 3b  ); ...int _ = 1;
08f0: 20 0d 0a 45 4e 44 0d 0a 43 41 53 45 28 32 29 0d   ..END..CASE(2).
0900: 0a 09 73 74 72 69 6e 67 20 67 72 69 64 5f 5b 5d  ..string grid_[]
0910: 20 3d 20 7b 22 57 42 22 2c 0d 0a 20 22 57 42 22   = {"WB",.. "WB"
0920: 7d 3b 0d 0a 09 20 20 76 65 63 74 6f 72 20 3c 73  };...  vector <s
0930: 74 72 69 6e 67 3e 20 67 72 69 64 28 67 72 69 64  tring> grid(grid
0940: 5f 2c 20 67 72 69 64 5f 2b 73 69 7a 65 6f 66 28  _, grid_+sizeof(
0950: 67 72 69 64 5f 29 2f 73 69 7a 65 6f 66 28 2a 67  grid_)/sizeof(*g
0960: 72 69 64 5f 29 29 3b 20 0d 0a 09 69 6e 74 20 5f  rid_)); ...int _
0970: 20 3d 20 32 3b 20 0d 0a 45 4e 44 0d 0a 43 41 53   = 2; ..END..CAS
0980: 45 28 33 29 0d 0a 09 73 74 72 69 6e 67 20 67 72  E(3)...string gr
0990: 69 64 5f 5b 5d 20 3d 20 7b 22 57 42 42 57 22 2c  id_[] = {"WBBW",
09a0: 0d 0a 20 22 57 42 57 42 22 2c 0d 0a 20 22 57 57  .. "WBWB",.. "WW
09b0: 42 42 22 2c 0d 0a 20 22 42 57 57 57 22 7d 3b 0d  BB",.. "BWWW"};.
09c0: 0a 09 20 20 76 65 63 74 6f 72 20 3c 73 74 72 69  ..  vector <stri
09d0: 6e 67 3e 20 67 72 69 64 28 67 72 69 64 5f 2c 20  ng> grid(grid_, 
09e0: 67 72 69 64 5f 2b 73 69 7a 65 6f 66 28 67 72 69  grid_+sizeof(gri
09f0: 64 5f 29 2f 73 69 7a 65 6f 66 28 2a 67 72 69 64  d_)/sizeof(*grid
0a00: 5f 29 29 3b 20 0d 0a 09 69 6e 74 20 5f 20 3d 20  _)); ...int _ = 
0a10: 32 3b 20 0d 0a 45 4e 44 0d 0a 43 41 53 45 28 34  2; ..END..CASE(4
0a20: 29 0d 0a 09 73 74 72 69 6e 67 20 67 72 69 64 5f  )...string grid_
0a30: 5b 5d 20 3d 20 7b 22 57 42 42 57 42 42 22 2c 0d  [] = {"WBBWBB",.
0a40: 0a 20 22 42 42 57 42 42 57 22 2c 0d 0a 20 22 57  . "BBWBBW",.. "W
0a50: 57 42 57 42 57 22 2c 0d 0a 20 22 42 57 57 42 42  WBWBW",.. "BWWBB
0a60: 42 22 2c 0d 0a 20 22 57 42 57 42 42 57 22 2c 0d  B",.. "WBWBBW",.
0a70: 0a 20 22 57 57 57 42 57 42 22 7d 3b 0d 0a 09 20  . "WWWBWB"};... 
0a80: 20 76 65 63 74 6f 72 20 3c 73 74 72 69 6e 67 3e   vector <string>
0a90: 20 67 72 69 64 28 67 72 69 64 5f 2c 20 67 72 69   grid(grid_, gri
0aa0: 64 5f 2b 73 69 7a 65 6f 66 28 67 72 69 64 5f 29  d_+sizeof(grid_)
0ab0: 2f 73 69 7a 65 6f 66 28 2a 67 72 69 64 5f 29 29  /sizeof(*grid_))
0ac0: 3b 20 0d 0a 09 69 6e 74 20 5f 20 3d 20 31 3b 20  ; ...int _ = 1; 
0ad0: 0d 0a 45 4e 44 0d 0a 2f 2a 0d 0a 43 41 53 45 28  ..END../*..CASE(
0ae0: 35 29 0d 0a 09 73 74 72 69 6e 67 20 67 72 69 64  5)...string grid
0af0: 5f 5b 5d 20 3d 20 3b 0d 0a 09 20 20 76 65 63 74  _[] = ;...  vect
0b00: 6f 72 20 3c 73 74 72 69 6e 67 3e 20 67 72 69 64  or <string> grid
0b10: 28 67 72 69 64 5f 2c 20 67 72 69 64 5f 2b 73 69  (grid_, grid_+si
0b20: 7a 65 6f 66 28 67 72 69 64 5f 29 2f 73 69 7a 65  zeof(grid_)/size
0b30: 6f 66 28 2a 67 72 69 64 5f 29 29 3b 20 0d 0a 09  of(*grid_)); ...
0b40: 69 6e 74 20 5f 20 3d 20 3b 20 0d 0a 45 4e 44 0d  int _ = ; ..END.
0b50: 0a 43 41 53 45 28 36 29 0d 0a 09 73 74 72 69 6e  .CASE(6)...strin
0b60: 67 20 67 72 69 64 5f 5b 5d 20 3d 20 3b 0d 0a 09  g grid_[] = ;...
0b70: 20 20 76 65 63 74 6f 72 20 3c 73 74 72 69 6e 67    vector <string
0b80: 3e 20 67 72 69 64 28 67 72 69 64 5f 2c 20 67 72  > grid(grid_, gr
0b90: 69 64 5f 2b 73 69 7a 65 6f 66 28 67 72 69 64 5f  id_+sizeof(grid_
0ba0: 29 2f 73 69 7a 65 6f 66 28 2a 67 72 69 64 5f 29  )/sizeof(*grid_)
0bb0: 29 3b 20 0d 0a 09 69 6e 74 20 5f 20 3d 20 3b 20  ); ...int _ = ; 
0bc0: 0d 0a 45 4e 44 0d 0a 2a 2f 0d 0a 7d 0d 0a 2f 2f  ..END..*/..}..//
0bd0: 20 45 4e 44 20 43 55 54 20 48 45 52 45 0d 0a      END CUT HERE..