Adding some more judges, here and there.
[and.git] / NEERC / central / interact_old.dpr
blob11723a6a3d634f86408572d2c7a6e9ccb0a03360
1 uses\r
2         sysutils;\r
3 \r
4 const\r
5         maxquestions = 2000;\r
6         maxn = 200;\r
7 \r
8 var\r
9         fin, fout, flog: text;\r
10         a, b: array [1..maxn] of longint;\r
11         questions: longint;\r
12         n, i, x, y, z, q, ans: longint;\r
13         qu: array [1..3] of longint;\r
14         s, ss, saves: string;\r
15         p: array [1..maxn] of longint;\r
16         fok: boolean;\r
18 procedure ok(s: string);\r
19 begin\r
20         rewrite(fout, 'central.out');\r
21         writeln(fout, 0);\r
22         writeln(fout, s);\r
23         close(fout);\r
24         halt(0);\r
25 end;\r
27 procedure pe(s: string);\r
28 begin\r
29         rewrite(fout, 'central.out');\r
30         writeln(fout, 2);\r
31         writeln(fout, s);\r
32         close(fout);\r
33         halt(1);\r
34 end;\r
36 procedure wa(s: string);\r
37 begin\r
38         rewrite(fout, 'central.out');\r
39         writeln(fout, 1);\r
40         writeln(fout, s);\r
41         close(fout);\r
42         halt(1);\r
43 end;\r
45 begin\r
46         reset(fin, 'central.in');\r
47         readln(fin, n);\r
48         rewrite(flog, 'central.log');\r
49         for i := 1 to n do begin\r
50                 read(fin, a[i]);\r
51                 p[a[i]] := i;\r
52         end;\r
54         writeln(n);\r
55         flush(output);\r
56         writeln(flog, '< ', n);\r
57         flush(flog);\r
59         questions := 0;\r
60         while true do begin\r
61                 readln(s);\r
62                 writeln(flog, '> ', s);\r
63                 flush(flog);\r
64                 if (copy(s, 1, 2) = 'OK') then begin\r
65                         delete(s, 1, 2);\r
66                         if (s = '') or (s[1] <> ' ') then\r
67                                 pe('space expected after OK');\r
68                         delete(s, 1, 1);\r
69                         s := s + ' ';\r
70                         for i := 1 to n do begin\r
71                                 q := pos(' ', s);\r
72                                 if (q = 0) then\r
73                                         pe('n numbers expected after OK');\r
74                                 ss := copy(s, 1, q - 1);\r
75                                 val(ss, b[i], z);\r
76                                 if (z <> 0) then\r
77                                         pe('n numbers expected after OK, ' + ss + ' found instead of number ' + inttostr(i));\r
78                                 delete(s, 1, q);\r
79                         end;\r
80                         if (s <> '') then\r
81                                 pe('n numbers expected after OK');\r
83                         fok := true;\r
84                         for i := 1 to n do begin\r
85                                 if (a[i] <> b[i]) then begin\r
86                                         fok := false;\r
87                                 end;\r
88                         end;\r
89                         if fok then\r
90                                 ok(inttostr(questions) + ' questions');\r
91                         fok := true;\r
92                         for i := 1 to n do begin\r
93                                 if (a[i] <> b[n - i + 1]) then begin\r
94                                         fok := false;\r
95                                 end;\r
96                         end;\r
97                         if fok then\r
98                                 ok(inttostr(questions) + ' questions');\r
100                         wa('neither of two possiblities');\r
101                 end else begin\r
102                         inc(questions);\r
103                         if (questions > maxquestions) then\r
104                                 wa('too many questions');\r
105                         s := s + ' ';\r
106                         saves := s;\r
107                         for i := 1 to 3 do begin\r
108                                 q := pos(' ', s);\r
109                                 if (q = 0) then\r
110                                         pe('3 numbers expected');\r
111                                 ss := copy(s, 1, q - 1);\r
112                                 val(ss, qu[i], z);\r
113                                 if (z <> 0) then\r
114                                         pe('3 numbers expected, ' + ss + ' found instead of number ' + inttostr(i));\r
115                                 delete(s, 1, q);\r
116                         end;\r
118                         if (qu[1] < 1) or (qu[1] > n) then\r
119                                 wa('invalid question: ' + saves);\r
120                         if (qu[2] < 1) or (qu[2] > n) then\r
121                                 wa('invalid question: ' + saves);\r
122                         if (qu[3] < 1) or (qu[3] > n) then\r
123                                 wa('invalid question: ' + saves);\r
125                         if (qu[1] = qu[2]) or (qu[1] = qu[3]) or (qu[2] = qu[3]) then\r
126                                 wa('invalid question: ' + saves);\r
128                         ans := 0;       \r
129                         for i := 1 to 3 do begin\r
130                                 x := p[qu[i]];\r
131                                 y := p[qu[i mod 3 + 1]];\r
132                                 z := p[qu[(i + 1) mod 3 + 1]];\r
133                                 if ((y < x) and (x < z)) or ((z < x) and (x < y)) then\r
134                                         ans := qu[i];\r
135                         end;\r
136                         writeln(ans);\r
137                         flush(output);\r
138                         writeln(flog, '< ', ans);\r
139                         flush(flog);\r
140                 end;\r
141         end;\r
142 end.