Adding some more judges, here and there.
[and.git] / NEERC / business / tests / genTests.dpr
blob54861eba6da7e647704159a8fbe9af7ea85862c7
1 {$r+,q+,o-}\r
2 {$apptype console}\r
3 uses\r
4     SysUtils, Math;\r
5 \r
6 type\r
7     int = longint;\r
8 \r
9 var\r
10     n, m: int;\r
11     u, d: array [1..2000] of int;\r
12     currentTestNumber: int;\r
14 procedure writeTest();\r
15 var\r
16     i: int;\r
17     fp: TEXT;\r
19 begin\r
20     inc(currentTestNumber);\r
21     writeln('Writing test ', currentTestNumber, '... (n = ', n, ' m = ', m, ')');\r
22     rewrite(fp, chr(ord('0') + (currentTestNumber div 10)) + '' + chr(ord('0') + (currentTestNumber mod 10)));\r
24     writeln(fp, n, ' ', m);\r
25     for i := 1 to m do\r
26         writeln(fp, u[i], ' ', d[i]);\r
28     close(fp);\r
29 end;\r
31 function calcAnswer(n, m, u, d: int): int;\r
32 var\r
33     a, b: int;\r
35 begin\r
36     a := (n * d) div (u + d) + 1;\r
37     b := n - a;\r
38     result := a * u - b * d;\r
39 end;\r
41 { Generates random test with n = nn, m = mm and with answer = answer }\r
42 procedure genRandomTest(nn, mm: int; answer: int);\r
43 var\r
44     i, cur, curAnswer: int;\r
46 begin\r
47     n := nn;\r
48     m := mm;\r
49     while (true) do begin\r
50         curAnswer := 2000000000;\r
51         for i := 1 to m do begin\r
52             cur := 0;\r
53             while (true) do begin\r
54                 u[i] := 1 + random(1000);\r
55                 d[i] := 1 + random(1000);\r
56                 cur := calcAnswer(n, m, u[i], d[i]);\r
57                 if (cur >= answer) then\r
58                     break;\r
59             end;\r
60             curAnswer := min(curAnswer, cur);\r
61         end;\r
62         if (curAnswer = answer) then\r
63             break;\r
64     end;\r
65 end;\r
67 procedure genMaxTest(nn, mm: int);\r
68 var\r
69     i: int;\r
71 begin\r
72     n := nn;\r
73     m := mm;\r
74     for i := 1 to m do begin\r
75         u[i] := 1000;\r
76         d[i] := 1000;\r
77     end;\r
78 end;\r
80 var\r
81     i: int;\r
83 begin\r
84     currentTestNumber := 1;\r
85     randseed := 238578235;\r
87     // Small tests\r
88     genRandomTest(1, 1, 239);\r
89     writeTest();\r
90     genRandomTest(1, 1, 1000);\r
91     writeTest();\r
92     genRandomTest(7, 2, 718);\r
93     writeTest();\r
94     genRandomTest(13, 5, 999);\r
95     writeTest();\r
96     genRandomTest(239, 15, 1);\r
97     writeTest();\r
98     genRandomTest(1, 100, 566);\r
99     writeTest();\r
101     // Tests with small answers\r
102     for i := 1 to 5 do begin\r
103         genRandomTest(1 + random(100), 1 + random(2000), i);\r
104         writeTest();\r
105     end;\r
107     // Tests with (100 <= answer <= 500)\r
108     for i := 1 to 5 do begin\r
109         genRandomTest(1 + random(100000), 1 + random(2000), 100 + random(401));\r
110         writeTest();\r
111         genRandomTest(1 + random(100), 1 + random(2000), 100 + random(401));\r
112         writeTest();\r
113     end;\r
115     // Tests with (500 <= answer <= 1000)\r
116     for i := 1 to 5 do begin\r
117         genRandomTest(1000000 - random(10000), 2000 - random(100), 500 + random(501));\r
118         writeTest();                                          \r
119         genRandomTest(1 + random(1000), 2000 - random(100), 500 + random(501));\r
120         writeTest();\r
121     end;\r
123     // Tests with big n, m and (1000 <= answer <= 1500)\r
124     for i := 1 to 5 do begin\r
125         genRandomTest(1000000 - random(10000), 2000 - random(100), 1000 + random(501));\r
126         writeTest();\r
127     end;\r
129     // Tests with big n, m and answer > 1600\r
130     for i := 1 to 5 do begin\r
131         genRandomTest(1000000 - random(1000), 2000 - random(100), 1600 + random(301));\r
132         writeTest();\r
133     end;\r
135     // Tests with big n, m and answer\r
136     genRandomTest(1000000, 2000, 1952);\r
137     writeTest();\r
138     genRandomTest(1000000, 2000, 1963);\r
139     writeTest();\r
140     genRandomTest(1000000, 2000, 1974);\r
141     writeTest();\r
142     genRandomTest(1000000, 2000, 1982);\r
143     writeTest();\r
144     genRandomTest(1000000, 2000, 1990);\r
145     writeTest();\r
146     genMaxTest(1000000, 2000);\r
147     writeTest();\r
148 end.\r