-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathHMM0.java
More file actions
114 lines (91 loc) · 3.04 KB
/
Copy pathHMM0.java
File metadata and controls
114 lines (91 loc) · 3.04 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
102
103
104
105
106
107
108
109
110
111
112
113
114
import java.util.*;
import java.lang.Math;
import java.lang.StringBuilder;
// Kattis ID 3041805
public class HMM0 {
public static String[][] takeInput(){
Scanner scan = new Scanner(System.in);
String[][] data = new String[3][];
String Line;
for(int line = 0; line < 3; line++){
Line = scan.nextLine();
String[] LineArray = Line.split(" ");
data[line] = LineArray;
}
return data;
}
public static Float[][] matrixMult(Float[][] a, Float[][] b){
int m1 = a.length;
int n1 = a[0].length;
int m2 = b.length;
int n2 = b[0].length;
if (n1 != m2) throw new RuntimeException("Illegal matrix dimensions.");
Float[][] c = new Float[m1][n2];
for (int i = 0; i < m1; i++){
for (int j = 0; j < n2; j++){
c[i][j] = 0f;
for (int k = 0; k < n1; k++){
c[i][j] += a[i][k] * b[k][j];}}}
return c;
}
public static String fixOutput(Float[][] ans){
StringBuilder builder = new StringBuilder();
builder.append("1");
builder.append(" ");
builder.append(Integer.toString(ans[0].length));
for(Float e: ans[0]) {
builder.append(" ");
builder.append(Float.toString(e));
}
//builder.setLength(builder.length() - 1);
String str = builder.toString();
return str;
}
public static void main(String[] args) {
String[][] data = takeInput();
int arow = Integer.parseInt(data[0][0]);
int acol = Integer.parseInt(data[0][1]);
int brow = Integer.parseInt(data[0][1]);
int bcol =Integer.parseInt(data[1][1]);
Float[][] A = new Float[arow][acol];
Float[][] B = new Float[brow][bcol];
Float[][] pi = new Float[1][data[2].length-2];
int w = 2;
for(int i = 0; i < arow; i++){
for(int j = 0; j < acol; j++){
A[i][j] = Float.parseFloat(data[0][w]);
w++;
}
}
w = 2;
for(int i = 0; i < brow; i++){
for(int j = 0; j < bcol; j++){
B[i][j] = Float.parseFloat(data[1][w]);
w++;
}
}
for(int i = 0; i < Integer.parseInt(data[2][1]); i++){
pi[0][i] = Float.parseFloat(data[2][i+2]);
}
/*
System.out.println("A: ");
for(int i = 0; i < A.length; i++){
System.out.println(Arrays.toString(A[i]));}
System.out.println("B: ");
for(int i = 0; i < B.length; i++){
System.out.println(Arrays.toString(B[i]));}
System.out.println("pi: ");
System.out.println(Arrays.toString(pi[0]));*/
Float[][] C = matrixMult(pi, A);
Float[][] ans = matrixMult(C, B);
/*
System.out.println("C: ");
for(int i = 0; i < C.length; i++){
System.out.println(Arrays.toString(C[i]));}
System.out.println("ans: ");
for(int i = 0; i < ans.length; i++){
System.out.println(Arrays.toString(ans[i]));}*/
String output = fixOutput(ans);
System.out.println(output);
}
}