Adding some more judges, here and there.
[andmenj-acm.git] / NEERC / javacert / tests / doall.java
blobc083065b2a92a96ba70c0d10f8eba9ca714d972d
1 import java.io.PrintWriter;
2 import java.io.FileNotFoundException;
3 import java.util.*;
5 public class doall {
7 int tn = 0;
9 void printTest(String comment, int[] n, int[] w) throws FileNotFoundException {
10 tn++;
11 System.out.println("Test " + String.format("%02d", tn) + ": " + comment);
12 PrintWriter out = new PrintWriter(String.format("%02d", tn));
13 int[] p = new int[n.length];
14 for (int i = 0; i < n.length; i++) {
15 p[i] = (int) Math.rint(100.0 * (n[i] - w[i]) / n[i]);
17 int nn = 0;
18 int kk = 0;
19 for (int i = 0; i < n.length; i++) {
20 nn += n[i];
21 kk += n[i] - w[i];
23 out.println(kk + " " + nn + " " + n.length);
24 for (int i = 0; i < n.length; i++) {
25 out.println(p[i]);
27 out.close();
30 Random random = new Random(124234234);
33 public static void main(String[] args) {
34 try {
35 new doall().run();
36 } catch (Exception e) {
37 e.printStackTrace();
38 System.exit(1);
42 private void run() throws Exception {
43 printTest("Sample test",
44 new int[] {13, 13, 18, 13, 16, 14},
45 new int[] {0, 0, 3, 1, 4, 1}
48 for (int n = 1; n < 4; n++) {
49 for (int k = 0; k <= n; k++) {
50 printTest(String.format("One category, n = %d, k = %d", n, k),
51 new int[] {n},
52 new int[] {n - k}
56 for (int n1 = 1; n1 < 3; n1++) {
57 for (int k1 = 0; k1 <= n1; k1++) {
58 for (int n2 = n1; n2 < 3; n2++) {
59 for (int k2 = 0; k2 <= n2; k2++) {
60 printTest(String.format("Two categories, (%d of %d) and (%d of %d)", k1, n1, k2, n2),
61 new int[] {n1, n2},
62 new int[] {n1 - k1, n2 - k2}
69 for (int i = 0; i < 10; i++) {
70 int m = 10;
71 int[] n = new int[m];
72 int[] w = new int[m];
73 int nn = 0;
74 for (int j = 0; j < m; j++) {
75 double z;
76 do {
77 n[j] = random.nextInt(100) + 1;
78 w[j] = random.nextInt(n[j]);
79 z = 100.0 * w[j] / n[j];
80 z = Math.abs(z - Math.round(z));
81 } while (Math.abs(z - 0.5) > 1e-9);
82 nn += n[j];
83 if (nn > 100) {
84 nn -= n[j];
85 m = j;
86 break;
89 int[] n2 = new int[m];
90 int[] w2 = new int[m];
91 System.arraycopy(n, 0, n2, 0, m);
92 System.arraycopy(w, 0, w2, 0, m);
93 printTest("Rounding issues", n2, w2);
96 for (int i = 0; i < 10; i++) {
97 int m = 5 + random.nextInt(6);
98 int nn = 50 + random.nextInt(51);
99 int kk = random.nextInt(nn + 1);
100 int[] n = new int[m];
101 Arrays.fill(n, 1);
102 nn -= m;
103 while (nn > 0) {
104 n[random.nextInt(m)]++;
105 nn--;
107 int[] w = n.clone();
108 while (kk > 0) {
109 int x;
110 do {
111 x = random.nextInt(m);
112 } while (w[x] == 0);
113 w[x]--;
114 kk--;
116 printTest("Random test", n, w);
120 int m = 10;
121 int[] n = new int[m];
122 Arrays.fill(n, 10);
123 int[] w = new int[m];
124 Arrays.fill(w, 10);
125 printTest("100% test", n, w);
129 int m = 10;
130 int[] n = new int[m];
131 Arrays.fill(n, 10);
132 int[] w = new int[m];
133 Arrays.fill(w, 0);
134 printTest("0% test", n, w);
138 int m = 10;
139 int[] n = new int[m];
140 Arrays.fill(n, 10);
141 int[] w = new int[m];
142 Arrays.fill(w, 5);
143 printTest("50% test", n, w);
146 for (int i = 0; i < 10; i++) {
147 int m = 10;
148 int nn = 100;
149 int kk = random.nextInt(nn + 1);
150 int[] n = new int[m];
151 Arrays.fill(n, 1);
152 nn -= m;
153 while (nn > 0) {
154 n[random.nextInt(m)]++;
155 nn--;
157 int[] w = new int[m];
158 for (int j = 0; j < m; j++) {
159 int k = random.nextInt(100);
160 if (k < 50) {
161 w[j] = n[j];
162 } else {
163 w[j] = 0;
166 printTest("Random 0, 100 test", n, w);
169 for (int i = 0; i < 10; i++) {
170 int m = 10;
171 int nn = 100;
172 int kk = random.nextInt(nn + 1);
173 int[] n = new int[m];
174 Arrays.fill(n, 1);
175 nn -= m;
176 while (nn > 0) {
177 n[random.nextInt(m)]++;
178 nn--;
180 int[] w = new int[m];
181 for (int j = 0; j < m; j++) {
182 int k = random.nextInt(100);
183 if (k < 20) {
184 w[j] = random.nextInt(n[j] + 1);
185 } else if (k < 60) {
186 w[j] = n[j];
187 } else {
188 w[j] = 0;
191 printTest("Random 0, 100, x test", n, w);
194 for (int i = 0; i < 10; i++) {
195 int m = 10;
196 int nn = 100;
197 int kk = random.nextInt(nn + 1);
198 int[] n = new int[m];
199 Arrays.fill(n, 1);
200 nn -= m;
201 while (nn > 0) {
202 n[random.nextInt(m)]++;
203 nn--;
205 int[] w = n.clone();
206 while (kk > 0) {
207 int x;
208 do {
209 x = random.nextInt(m);
210 } while (w[x] == 0);
211 w[x]--;
212 kk--;
214 printTest("Big random test", n, w);