forked from NASU41/AtCoderLibraryForJava
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathGen.java
More file actions
101 lines (94 loc) · 3.92 KB
/
Gen.java
File metadata and controls
101 lines (94 loc) · 3.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package test;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
public class Gen {
static final int TESTCASE_NUM = 100;
static final Random rnd = new Random(System.nanoTime());
static final int N_MIN = 1;
static final int N_MAX = 5000;
static final int Q_MIN = 1;
static final int Q_MAX = 10000;
static final int A_MIN = -1000000000;
static final int A_MAX = 1000000000;
static final int V_MIN = -1000000000;
static final int V_MAX = 1000000000;
static final int QUERY_MIN = 0;
static final int QUERY_MAX = 7;
public static void main(String[] args) {
for (int i = 0; i < TESTCASE_NUM; i++) {
String fileName = String.format("LazySegTree/test/in/testcase_%d", i);
try (PrintWriter out = new PrintWriter(new File(fileName))) {
gen(out);
} catch (IOException e) {
e.printStackTrace();
System.exit(1);
}
}
}
public static void gen(PrintWriter out) {
final int N = rndIntClosedRange(N_MIN, N_MAX);
final int Q = rndIntClosedRange(Q_MIN, Q_MAX);
final int P_MIN = 0, P_MAX = N - 1;
final int L_MIN = 0, L_MAX = N;
final int R_MIN = 0, R_MAX = N;
out.print(N); out.print(' '); out.print(Q); out.print('\n');
final int[] A = new int[N];
for (int i = 0; i < N; i++) {
A[i] = rndIntClosedRange(A_MIN, A_MAX);
out.print(A[i]);
if (i < N - 1) {
out.print(' ');
} else {
out.print('\n');
}
}
for (int i = 0; i < Q; i++) {
int type = rndIntClosedRange(QUERY_MIN, QUERY_MAX);
out.print(type);
if (type == 0) { // set
int p = rndIntClosedRange(P_MIN, P_MAX);
int v = rndIntClosedRange(V_MIN, V_MAX);
out.print(' ');out.print(p);out.print(' ');out.print(v);out.print('\n');
} else if (type == 1) { // apply
int p = rndIntClosedRange(P_MIN, P_MAX);
int v = rndIntClosedRange(V_MIN, V_MAX);
out.print(' ');out.print(p);out.print(' ');out.print(v);out.print('\n');
} else if (type == 2) { // apply
int l = rndIntClosedRange(L_MIN, L_MAX);
int r = rndIntClosedRange(R_MIN, R_MAX);
int v = rndIntClosedRange(V_MIN, V_MAX);
if (l > r) {
int tmp = l; l = r; r = tmp;
}
out.print(' ');out.print(l);out.print(' ');out.print(r);out.print(' ');out.print(v);out.print('\n');
} else if (type == 3) { // get
int p = rndIntClosedRange(P_MIN, P_MAX);
out.print(' '); out.print(p);out.print('\n');
} else if (type == 4) { // prod
int l = rndIntClosedRange(L_MIN, L_MAX);
int r = rndIntClosedRange(R_MIN, R_MAX);
if (l > r) {
int tmp = l; l = r; r = tmp;
}
out.print(' ');out.print(l);out.print(' ');out.print(r);out.print('\n');
} else if (type == 5) { // prodAll
out.print('\n');
} else if (type == 6) { // maxRight
int l = rndIntClosedRange(L_MIN, L_MAX);
int v = rndIntClosedRange(V_MIN, V_MAX);
out.print(' ');out.print(l);out.print(' ');out.print(v);out.print('\n');
} else if (type == 7) { // minLeft
int r = rndIntClosedRange(R_MIN, R_MAX);
int v = rndIntClosedRange(V_MIN, V_MAX);
out.print(' ');out.print(r);out.print(' ');out.print(v);out.print('\n');
} else {
throw new AssertionError();
}
}
}
public static int rndIntClosedRange(int l, int r) {
return rnd.nextInt(r - l + 1) + l;
}
}