P1214
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
public class Exercise1214
{
public static void main(String[] args)
{
int[] a = new int[1501];
a[1] = 1;
TreeMap<Integer, Integer> map = new TreeMap<Integer, Integer>();
Deque<Integer> Q2 = new ArrayDeque<Integer>();
Deque<Integer> Q3 = new ArrayDeque<Integer>();
Deque<Integer> Q5 = new ArrayDeque<Integer>();
map.put(2, 2);
map.put(3, 3);
map.put(5, 5);
for (int i = 2; i < 1501; i++) {
if (map.isEmpty())
break;
Map.Entry<Integer, Integer> e = map.pollFirstEntry();
int key = e.getKey();
int val = e.getValue();
if (val == 5) {
Q5.add(key * 5);
map.put(Q5.pollFirst(), 5);
} else if (val == 3) {
Q5.add(key * 5);
Q3.add(key * 3);
map.put(Q3.pollFirst(), 3);
} else {
Q5.add(key * 5);
Q3.add(key * 3);
Q2.add(key * 2);
map.put(Q2.pollFirst(), 2);
}
a[i] = key;
}
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
System.out.println(a[sc.nextInt()]);
}
}
}
1.三个队列分别存放*2,*3,*5以后的值
2.一个treemap,key为值,value为来自哪一个队列。如果来自队列2,则每个队列需要加入map中最小的元素*对应的数值
P1350
import java.util.Scanner;
public class Exercise1350 {
private static int deep;
private static int[][] a;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int n = sc.nextInt();
a = new int[n + 1][2];
a[0][0] = -1;
a[0][1] = -1;
for (int i = 1; i < n + 1; i++) {
a[i][0] = sc.nextInt();
a[i][1] = sc.nextInt();
}
foo(1, 1);
System.out.println(deep);
}
}
private static void foo(int i, int j) {
if (a[i][0] == -1) {
if (j > deep)
deep = j;
} else
foo(a[i][0], j + 1);
if (a[i][1] == -1) {
if (j > deep)
deep = j;
} else
foo(a[i][1], j + 1);
return;
}
}
利用矩阵模拟二叉树