int N = fin.nextInt();
long[] count = new long[8];
count[6] = 0;
count[7] = 1;
long mod = 1000000007;
for (int i = 2; i <= N; ++i) {
long[] newCount = new long[8];
newCount[0] = (count[0] * 2 + count[1] + count[3]) % mod; newCount[1] = (count[1] * 2 + count[2] + count[5]) % mod; newCount[2] = (count[2] + count[6]) % mod;
newCount[3] = (count[3] * 2 + count[4] + count[5]) % mod; newCount[4] = (count[4] + count[7]) % mod;
newCount[5] = (count[5] * 2 + count[6] + count[7]) % mod; newCount[6] = 0;
newCount[7] = 1;
count = newCount;
}
System.out.println(count[0]);
}
}
5.I’m stuck!
import java.util.*;
public class Main {
public static void main(String[] args) {
new Main().run();
}
public void run() {
Scanner fin = new Scanner(System.in);
int R = fin.nextInt();
int C = fin.nextInt();
fin.nextLine();
int[][] board = new int[R + 2][C + 2];
int rowStart = 0, colStart = 0, rowEnd = 0, colEnd = 0; for (int i = 1; i <= R; ++i) {
String line = fin.nextLine();
for (int j = 1; j <= C; ++j) {
char c = line.charAt(j - 1);
switch (c) {
case '#': break;
case '-': board[i][j] = 5; break;
case '|': board[i][j] = 0xA; break;
case '+':
case 'S':
case 'T':
board[i][j] = 0xF; break; case '.': board[i][j] = 0x8; break;
default: break;
}
if (c == 'S') {
rowStart = i;
colStart = j;
} else if (c == 'T') {
rowEnd = i;
colEnd = j;
}
}
}
int[] dr = new int[] {0, -1, 0, 1};
int[] dc = new int[] {1, 0, -1, 0};
// Scan 1: find all cells which can reach T
boolean[][] visited = new boolean[R + 2][C + 2]; boolean[][] canReachT = new boolean[R + 2][C + 2]; initVisited(visited);
canReachT[rowEnd][colEnd] = true;
visited[rowEnd][colEnd] = true;
Queue
queue.add(colEnd);
while (!queue.isEmpty()) {
int r = queue.remove();
int c = queue.remove();
for (int i = 0; i < 4; ++i) {
int nr = r + dr[i];