1. 第一题
过了 96% ,不知道什么特例没考虑到
public class Parabox {
public static void main(String[] args) {
int K, N;
Scanner scanner = new Scanner(System.in);
K = scanner.nextInt();
N = scanner.nextInt();
if (K==0){
System.out.println("parabox");
return;
}
if (N==0){
System.out.println(K + " " + 0);
return;
}
int[] step = new int[N];
for (int i = 0; i < N; i++) {
step[i] = scanner.nextInt();
}
int num = 0;
for (int i = 0; i < N; i++) {
if((K -= step[i]) == 0){
//如果到达终点,输出“parabox"
System.out.println("parabox");
return;
} else if (K > 0){
continue;
} else {
K = -K;
num++;
}
}
//输出结果
System.out.println(K+" "+num);
}
}
2. 第二题
class Dice {
static int[][] INDICES = {
{2, 4, 3, 5},
{5, 3, 4, 2},
{5, 1, 4, 0},
{0, 4, 1, 5},
{1, 3, 0, 2},
{2, 0, 3, 1}
};
int[] planes;
int[] side;
int start;
public Dice(int[] p) {
this.planes = p;
this.side = new int[4];
this.start = 0;
int index = 0;
for (int i = 0; i < 6; i++)
if (p[i] == 1) index = i;
for (int i = 0; i < 4; i++) {
this.side[i] = p[INDICES[index][i]];
if (this.side[i] < side[start])
start = i;
}
}
public boolean isSame(Dice d) {
for (int i = 0; i < 4; i++) {
int n1 = d.side[(d.start + i) % 4];
int n2 = this.side[(start + i) % 4];
if (n1 != n2) return false;
}
return true;
}
}
public class Main {
public static void main(String args[]) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
HashMap<Dice, Integer> diceNum = new HashMap<>();
for (int i = 0; i < N; i++) {
int[] p = new int[6];
for (int j = 0; j < 6; j++) {
p[j] = scanner.nextInt();
}
Dice dice = new Dice(p);
boolean sameFlag = false;
for (Dice d: diceNum.keySet()) {
if (dice.isSame(d)) {
diceNum.put(d, diceNum.get(d) + 1);
sameFlag = true;
break;
}
}
if (!sameFlag) diceNum.put(dice, 1);
}
ArrayList<Integer> nums = new ArrayList<>(diceNum.values());
Collections.sort(nums);
Collections.reverse(nums);
System.out.println(nums.size());
for (int i = 0; i < nums.size(); i++) {
System.out.print(nums.get(i));
if (i < nums.size() - 1)
System.out.print(" ");
}
}
}
3. 第三题
public class EatFood {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//int M = 3;
//int N=3,T=10;
int M = scanner.nextInt();
int N = scanner.nextInt();
int T = scanner.nextInt();
int[][] A = new int [M][2];
//{{1,1},{2,5},{3,7}};
int[][] B = new int [N][2];
//{{2,4},{4,8},{6,9}};
for(int i=0;i<M;i++){
A[i][0] = scanner.nextInt();
A[i][1] = scanner.nextInt();
}
for(int i=0;i<N;i++){
B[i][0] = scanner.nextInt();
B[i][1] = scanner.nextInt();
}
System.out.println(solution(M,N,T,A,B));
}
public static int solution(int M, int N, int T, int[][] A, int[][] B){
int ans = -1;
if(T==0) return 0;
int [] dp = new int [T];
for(int i=0;i<dp.length;i+=1){
dp[i]=0;
}
//first
for(int i=0;i<dp.length;i++){
for(int j=0;j<M;j++){
if(A[j][1]>=(i+1)){
if(dp[i]==0) dp[i]=A[j][0];
else dp[i]=Math.min(dp[i],A[j][0]);
}
}
}
for(int i=0;i<N;i++){
int temp_0 = T-B[i][1]-1;
int temp_min = -1;
for(int j = temp_0;j<T;j++){
if(dp[j]!=0){
if(temp_min==-1) temp_min=dp[j];
else temp_min=Math.min(dp[j],temp_min);
break;
}
}
if(temp_min==-1) continue;
if(dp[T-1]==0) dp[T-1]=(temp_min+B[i][0]);
else dp[T-1]=Math.min(temp_min+B[i][0],dp[T-1]);
}
if(dp[T-1]!=0) ans=dp[T-1];
return ans;
}
}
4. 第四题
6*6的方块种植物,#表示空地,*表示障碍物,种六种植物,相同的不得相邻,求能种多少种?
输入:
#*****
******
******
******
******
******
输出:6
#*****
******
******
******
******
*****#
输出:36
感觉有点地图染色问题,八皇后问题的感觉,没有想到解决方法。
Create by ycx3430476