Adding some more judges, here and there.
[andmenj-acm.git] / NEERC / central / central_as.dpr
blob7df90b7afef1feee9e446505e76b120a0c1f9097
1 const\r
2         maxn = 200;\r
3 \r
4 var\r
5         i, j, n, p1min, p2min, p1max, p2max: longint;\r
6         a: array [1..maxn] of longint;\r
7 \r
8 function ask(i, j, k: longint): longint;\r
9 begin\r
10         writeln(i, ' ', j, ' ', k);\r
11         flush(output);\r
13         readln(result);\r
14 end;\r
16 procedure find4(i, j, k, l: longint; var r1, r2: longint; s: longint);\r
17 var\r
18         v1, v2, v3, v4: longint;\r
19 begin\r
20     v1 := ask(i, j, k);\r
21     v2 := ask(i, j, l);\r
22     v3 := ask(i, k, l);\r
23     v4 := ask(j, k, l);\r
24     if v1 = v2 then begin\r
25         if v1 * s < v3 * s then begin\r
26                 r1 := i;\r
27                 r2 := j;\r
28         end else begin\r
29                 r1 := k;\r
30                 r2 := l;\r
31         end;\r
32     end;\r
33     if v1 = v3 then begin\r
34         if v1 * s < v2 * s then begin\r
35                 r1 := i;\r
36                 r2 := k;\r
37         end else begin\r
38                 r1 := j;\r
39                 r2 := l;\r
40         end;\r
41     end;\r
42     if v1 = v4 then begin\r
43         if v1 * s < v2 * s then begin\r
44                 r1 := j;\r
45                 r2 := k;\r
46         end else begin\r
47                 r1 := i;\r
48                 r2 := l;\r
49         end;\r
50     end;\r
51 end;\r
52   \r
53 begin\r
54         readln(n);\r
55         assert((3 <= n) and (n <= 200));\r
56         if n = 3 then begin\r
57                 writeln('OK 1 2 3');\r
58                 flush(output);\r
59                 halt(0);\r
60         end;\r
62         i := 4;\r
63         p1min := 1;\r
64         p2min := 2;\r
65         p1max := 1;\r
66         p2max := 2;\r
67         while (i <= n) do begin\r
68                 find4(p1min, p2min, i - 1, i, p1min, p2min, 1);\r
69                 find4(p1max, p2max, i - 1, i, p1max, p2max, -1);\r
70                 i := i + 2;\r
71                 if i = n + 1 then begin\r
72                         j := 1;\r
73                         while (j = p1min) or (j = p2min) do inc(j);\r
74                 find4(p1min, p2min, j, i - 1, p1min, p2min, 1);\r
75                         j := 1;\r
76                         while (j = p1max) or (j = p2max) do inc(j);\r
77                 find4(p1max, p2max, j, i - 1, p1max, p2max, -1);\r
78                 end;\r
79         end;\r
81     for i := 1 to n do begin\r
82                 if i = p1min then \r
83                         a[i] := 1\r
84                 else if i = p2min then\r
85                         a[i] := 2\r
86                 else if i = p1max then\r
87                         a[i] := n - 1\r
88                 else if i = p2max then\r
89                         a[i] := n\r
90                 else\r
91                         a[i] := ask(p1min, i, p1max);\r
92         end;\r
94         write('OK');\r
95         for i := 1 to n do begin\r
96                 write(' ', a[i]);\r
97         end;\r
98         writeln;\r
99         flush(output);\r
100 end.