見出し画像

MC Digital プログラミングコンテスト2022(AtCoder Heuristic Contest 008)

暫定27位/827でした。黄パフォえらい。

[Q] https://atcoder.jp/contests/ahc008/tasks/ahc008_a

1. 固定盤面を作っちゃう。

画像1

円型にしたのは、
・外壁を使った穴数を多くしたかった
・導線をスムーズにしたかった
から。
直線よりも、斜めに置くほうがちょっと効率よさそうでした。

見取り図と、導線をべた書き。

 void saku33() {
   //          012345678901234567890123456789
   saku[+0] = "#..#..#..#..#..#..#..#..#..#..";
   saku[+1] = ".#..#..#..#..#.#.#..#..#..#..#";
   saku[+2] = "..#..#..#..#.......#..#..#..#.";
   saku[+3] = "#..#..#..#...........#..#..#..";
   saku[+4] = ".#..#..#.......###.....#..#..#";
   saku[+5] = "..#..#.......#....#......#..#.";
   saku[+6] = "#..#.......#..#..#..#...#..#..";
   saku[+7] = ".#..#....#..#..##..#......#..#";
   saku[+8] = "..#....#..#..#.#..#..#...#..#.";
   saku[+9] = "#..#....#..#..#..#..#......#..";
   saku[10] = ".#....#..#..#..##..#..#...#..#";
   saku[11] = "..#....#..#..#.#..#..#......#.";
   saku[12] = "#....#..#..#..#..#..#..#...#..";
   saku[13] = ".#....#..#..#..##..#..#......#";
   saku[14] = "....#..#..#..#..#.##.#..#...#.";
   saku[15] = "..#..#.##.##.##..#..#..##.....";
   saku[16] = ".#....#..#..#..#..#..##..#..#.";
   saku[17] = "#..#....#..#..#.#..#..#..#...#";
   saku[18] = "..#....#..#..#..##..#..#...#..";
   saku[19] = ".#..#....#..#..#..#..#......#.";
   saku[20] = "#..#....#..#..#.#..#..#...#..#";
   saku[21] = "..#..#....#..#..##..#......#..";
   saku[22] = ".#..#.......#..#..#..#...#..#.";
   saku[23] = "#..#..#.......#.#..#......#..#";
   saku[24] = "..#..#..#........#......#..#..";
   saku[25] = ".#..#..#..#....##.....#..#..#.";
   saku[26] = "#..#..#..#..#.......#..#..#..#";
   saku[27] = "..#..#..#..#..#...#..#..#..#..";
   saku[28] = ".#..#..#..#..#..#..#..#..#..#.";
   saku[29] = "#..#..#..#..#....#..#..#..#..#";
 }

 void root33() {
   //          012345678901234567890123456789
   root[+0] = "#RRD..#..#..#..#..#..#..#..#..";
   root[+1] = ".U.RRRRRRRRRD#.DLLLLLLLLLLLLL#";
   root[+2] = ".U#..#..#..#D..D...#..#..#..U.";
   root[+3] = "#U.#DLLLLLLLL..RRRRRRRRRRD.#U.";
   root[+4] = ".U..D..#.......###.....#.D#.U#";
   root[+5] = ".U#.D#......RRRRRD#......D..U.";
   root[+6] = "#U.#D......#U.#..D..#...#RD#U.";
   root[+7] = ".U..D...D#..ULL##D.#......D.U#";
   root[+8] = ".U#.D..#D.x..#U#.RRRD#...#D.U.";
   root[+9] = "#U.#!...D..x..U..#..D.....!#U.";
   root[10] = ".U...!#.D#.Lx.ULLL.#RD#...#.U#";
   root[11] = ".U#..U.#D.x..x.#.U#..D......U.";
   root[12] = "#U...U..D..x..x..U..#RRRD..#U.";
   root[13] = ".U...U#.D#..x..x#U.#..#.D...U#";
   root[14] = "....#UL#D.#..x..xLLLLLL.D...U.";
   root[15] = ".D#..#U#RRRRD#x..x..#.U#D.....";
   root[16] = ".D....U..#..D..x..x..#U.D#..#.";
   root[17] = "#D.#..ULLL.#D.#.x..x..U.!#..D#";
   root[18] = ".D#!...#.U#.RRRD#x.Dx.U#...#D.";
   root[19] = ".D.U#....U..#..D..xRRRU.....D.";
   root[20] = "#D.U....#ULLLL#D#..x..#...#.D#";
   root[21] = ".D#U.#....#..U.D##..x.....!#D.";
   root[22] = ".D.ULLLL....#U.RRRRRD#...#U.D.";
   root[23] = "#D.#..#U.....U#.#..#D.....U.D#";
   root[24] = ".D#.RRRU#....ULLLLLLL...#RU#D.";
   root[25] = ".D..U..#..#....##.....#..U..D.";
   root[26] = "#D.#ULLLLLLLLL...RRRRRRRRU#.D#";
   root[27] = ".D#..#..#..#.U#..U#..#..#..#D.";
   root[28] = ".D.RRRRRRRRRRU..#ULLLLLLLLL.D.";
   root[29] = "#RRU..#..#..#....#..#..#..ULL#";
 }


2. プレイヤーの行動パターン
1) 捕まえられるなら、捕まえちゃう(深さ2までのバックトラック)
2)  最小コストで、ペットと人を1対1に繋ぎ、粘着させる。
です。

3. 犬どうする?
A. seed80
最初に、画面中央に筒を作り、両端に集まります。
捕まえられるタイミングを待ち、捕え次第固定盤面に移ります。

画面の中央を見てて。

「今です!」

画像2

運が悪いと80ターン近く待機させられ大事故。

Q. 全部捕まえられた?
A.
77/100でパーフェクトゲームでした。
20/100で1-2匹のこり。猫が逃げます。
3/100で大事故。これは犬待ちが長すぎるなど。

seed/M/N/dog/cat/score
45 19  7  4  2:1791667
29 17  5  1  1:1850694
61 15  5  3  1:7638889
84 17  5  5  2:15000000
17 13  5  4  2:15916667
71 10  5  2  3:16027778
50 18  5  1  6:21777778
91 20  7  5  2:23222222
70 20  5  0  5:27111111
34 20  5  4  4:27500000
85 19  7  3  5:28000000
15 20 10  1  6:28055556
86 19  8  0  5:28333333
48 20  8  5  2:29000000
57 15  6  4  1:29500000
60 18 10  4  2:29555556
72 20  6  5  4:29777778
25 14 10  2  4:29888889
56 16  5  3  5:30055556
44 13  5  3  2:30277778
81 16  8  5  2:30277778
6 15  6  5  1:30500000
9 17  5  5  5:30500000
58 15 10  5  2:30555556
32 13  5  3  4:30722222
69 14  5  5  3:30944444
62 16  6  2  5:33777778
53 12  6  2  0:50000000
51 19  5  2  6:53666667
2 19  7  3  5:53777778
39 20 10  2  6:54000000
1 20  6  4  4:54222222
18 16  9  2  3:55555556
92 19  7  2  6:55888889
46 19  9  3  6:56111111
59 19  6  5  6:56222222
75 20 10  6  4:56444444
40 16  7  2  2:56555556
5 17 10  2  1:57000000
14 20 10  4  3:57000000
7 16  8  2  4:57222222
99 19  8  6  3:57777778
28 18  9  4  5:57888889
97 15 10  1  4:58000000
30 18  7  5  4:58111111
65 17  8  3  4:58222222
23 17  5  3  1:58333333
77 12  9  0  3:58444444
79 13  9  1  3:58444444
64 17  7  4  3:58444444
36 12  8  0  2:58555556
83 19  8  6  4:58555556
54 13  8  3  0:58666667
12 18  8  6  2:58888889
19 14  8  1  2:59000000
90 15  6  2  5:59000000
22 15  7  3  1:59111111
20 12  6  0  2:59333333
24 16  6  4  3:59333333
47 13  6  0  3:59444444
88 12  8  1  2:59555556
95 14  7  4  3:59555556
66 15  8  1  8:59555556
8 15 10  1  4:59555556
42 13  7  1  2:59666667
11 18  9  5  4:59666667
13 16 10  4  4:59888889
3 13  5  3  1:60000000
76 13  7  2  3:60000000
80 16  7  6  3:60000000
43 14  5  4  1:60444444
38 14  8  4  3:60666667
52 12  8  3  2:60777778
10 11 10  2  2:61000000
68 11  7  2  2:61111111
63 17  9  5  2:61111111
35 11  7  0  3:61222222
78 11  7  1  3:61222222
94 12  7  3  3:61222222
31 10  9  2  2:61555556
87 11  9  2  5:61777778
98 10  6  2  2:61888889
96 10  7  1  4:61888889
0 10  5  0  0:62000000
26 15 10  5  4:62111111
67 10  7  2  2:62222222
73 11 10  1  3:62222222
4 10  7  3  2:62555556
49 11  8  4  1:62555556
33 10  9  2  1:62666667
21 11  5  2  1:62777778
37 12  8  2  5:62777778
93 12  8  5  1:62777778
55 13  6  5  3:62777778
27 12  6  5  2:63333333
16 10 10  3  1:63777778
41 13 10  6  0:63888889
89 12  5  4  1:64000000
74 11  8  4  2:64444444
82 10 10  5  1:64555556
5019559033

https://atcoder.jp/contests/ahc008/submissions/29656785

いいなと思ったら応援しよう!