| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
3735一直WA啊,求求大神帮忙QAQ 报个TLE处理稀疏矩阵也好啊,但一直WA
import java.util.Scanner;
public class Main{
static int N;
static int M;
static int K;
static int[][] cats;
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
N = scan.nextInt();
M = scan.nextInt();
K = scan.nextInt();
while (N != 0 || M != 0 || K != 0) {
cats = new int[N + 1][N + 1];
for (int i = 0; i < cats.length; i++) {
cats[i][i] = 1;
}
for (int i = 0; i < K; i++) {
String action = scan.next();
if ("g".equals(action)) {
cats[scan.nextInt() - 1][N]++;
} else if ("s".equals(action)) {
int a = scan.nextInt() - 1;
int b = scan.nextInt() - 1;
int[] temp = cats[a];
cats[a] = cats[b];
cats[b] = temp;
} else if ("e".equals(action)) {
int index = scan.nextInt() - 1;
for (int j = 0; j < cats[index].length; j++) {
cats[index][j] = 0;
}
}
}
solve();
N = scan.nextInt();
M = scan.nextInt();
K = scan.nextInt();
}
scan.close();
}
private static void solve() {
cats = pow(cats, M);
for (int i = 0; i < N - 1; i++) {
System.out.print(cats[i][N] + " ");
}
System.out.println(cats[N - 1][N]);
}
private static int[][] mul(int[][] matA, int[][] matB) {
int[][] matrix = new int[matA.length][matB[0].length];
for (int i = 0; i < matA.length; i++) {
for (int j = 0; j < matB[0].length; j++) {
for (int k = 0; k < matA[0].length; k++) {
matrix[i][j] += matA[i][k] * matB[k][j];
}
}
}
return matrix;
}
private static int[][] pow(int[][] mat, int n) {
int[][] matrix = new int[mat.length][mat[0].length];
for (int i = 0; i < matrix.length; i++) {
matrix[i][i] = 1;
}
while (n > 0) {
if ((n & 1) == 1) {
matrix = mul(mat, matrix);
}
mat = mul(mat, mat);
n >>= 1;
}
return matrix;
}
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator