POJ 3735 java实现
来源:互联网 发布:数据的有效性 编辑:程序博客网 时间:2024/06/07 06:48
POJ 3735 java实现
import java.util.Scanner;public class Main3735 {static boolean stringequal(String a, String b) {char[] s = a.toCharArray();char[] t = b.toCharArray();if (s.length != b.length()) {return false;}for (int i = 0; i < t.length; i++) {if (s[i] != t[i]) {return false;}}return true;}public static void main(String[] args) throws Exception {System.setIn(new java.io.FileInputStream("3735.txt"));Scanner sc = new Scanner(System.in);while (true) {int n = sc.nextInt();int m = sc.nextInt();int k = sc.nextInt();if (n == m && m == k && m == 0) {break;}long[][] petmatri = new long [2][n+2];petmatri[1][n+1]=1;long[][] basematri = new long[n + 2][n + 2];for (int i = 1; i < basematri.length; i++) {basematri[i][i] = 1;}long[][] init = new long[n + 2][n + 2];for (int i = 0; i < basematri.length; i++) {init[i][i] = 1;}int pettagi, pettagj;for (int i = 0; i < k; i++) {String get = sc.next();if (stringequal(get, "g")) {pettagi = sc.nextInt();basematri[n + 1][pettagi]++;} else if (stringequal(get, "s")) {pettagi = sc.nextInt();pettagj = sc.nextInt();long temp;for (int j = 1; j < basematri.length; j++) {temp = basematri[j][pettagi];basematri[j][pettagi] = basematri[j][pettagj];basematri[j][pettagj] = temp;}} else {pettagi = sc.nextInt();for (int j = 1; j < basematri.length; j++) {basematri[j][pettagi] = 0;}}}while (m != 0) {if ((m & 1) != 0)init=matricMultple(init, basematri);basematri = matricMultple(basematri, basematri);m >>= 1;}long[][] result = matricMultple(petmatri, init);for (int i = 1; i < result[0].length-1; i++) {System.out.print(result[1][i] + " ");}System.out.println();}}static long[][] matricMultple(long[][] a, long[][] b) {long[][] res = new long[a.length][b[0].length];//for (int i = 1; i < a.length; i++) {//for (int j = 1; j < b.length; j++) {//for (int j2 = 1; j2 < b[0].length; j2++) {//res[i][j] += a[i][j2] * b[j2][j];//}//}//}// 优化 前矩阵 的项值为零时,牵涉到此值的计算,全部忽略。for (int i = 1; i < a.length; i++) {for (int j = 0; j < a[0].length; j++) {if (a[i][j] != 0) {for (int j2 = 0; j2 < a[0].length; j2++) {res[i][j2] += a[i][j] * b[j][j2];}}}}return res;}}
阅读全文
0 0
- POJ 3735 java实现
- poj 3431 Java实现
- POJ 1185 java实现
- poj 1260 Java实现
- POJ 3267 java实现
- 北大POJ 1001 (Java实现)
- POJ 2636 Electrical Outlets java实现
- Java实现POJ 1017:装箱问题
- poj 3070 java实现矩阵快速幂
- POJ 1001 Exponentiation(大数幂Java实现)
- 【java实现大实数幂次方】POJ 1001
- poj 1007实现感想
- poj 1001代码实现
- POJ 2418 Java
- POJ 2299 Java
- POJ 1011 - Java
- poj 1032 java版本
- poj 2389 Java
- Vdbench的校验原理
- JDK8.0新功能
- JAVA-SSM框架中配置mysql读写分离,动态加载数据源
- J
- CheckPoint_vSEC_Cluster_R77.30
- POJ 3735 java实现
- Hadoop快速入门学习
- 18
- oracle批量插入,数据量较大时报错,解决措施---分步循环插入
- PHP源生数据分页显示
- dubbo 协议
- 根据对象中某一属性进行升序降序排序的javascript实现
- JAVA-类的加载过程
- vortex-报错集