双周赛71
This commit is contained in:
parent
3dad0a822d
commit
5658e22455
127
src/main/java/contest/y2022/m2/dw/SolutionD71.java
Normal file
127
src/main/java/contest/y2022/m2/dw/SolutionD71.java
Normal file
@ -0,0 +1,127 @@
|
||||
package contest.y2022.m2.dw;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class SolutionD71 {
|
||||
public static void main(String[] args) {
|
||||
SolutionD71 solution = new SolutionD71();
|
||||
}
|
||||
|
||||
public int minimumSum(int num) {
|
||||
List<Integer> list = new ArrayList<>();
|
||||
while (num >= 10) {
|
||||
int temp = num % 10;
|
||||
if (temp > 0) {
|
||||
list.add(temp);
|
||||
}
|
||||
num /= 10;
|
||||
}
|
||||
list.add(num);
|
||||
Collections.sort(list);
|
||||
int size = list.size();
|
||||
int result = 0;
|
||||
switch (size) {
|
||||
case 1:
|
||||
result = list.get(0);
|
||||
break;
|
||||
case 2:
|
||||
result = list.get(0) + list.get(1);
|
||||
break;
|
||||
case 3:
|
||||
result = list.get(0) * 10 + list.get(1) + list.get(2);
|
||||
break;
|
||||
case 4:
|
||||
result = list.get(0) * 10 + list.get(1) * 10 + list.get(2) + list.get(3);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public int[] pivotArray(int[] nums, int pivot) {
|
||||
List<Integer> small = new ArrayList<>();
|
||||
List<Integer> large = new ArrayList<>();
|
||||
int count = 0;
|
||||
for (int num : nums) {
|
||||
if (num == pivot) {
|
||||
count++;
|
||||
} else if (num < pivot) {
|
||||
small.add(num);
|
||||
} else {
|
||||
large.add(num);
|
||||
}
|
||||
}
|
||||
int[] results = new int[nums.length];
|
||||
int index = 0;
|
||||
for (int num : small) {
|
||||
results[index] = num;
|
||||
index++;
|
||||
}
|
||||
for (int i = 0; i < count; i++) {
|
||||
results[index] = pivot;
|
||||
index++;
|
||||
}
|
||||
for (int num : large) {
|
||||
results[index] = num;
|
||||
index++;
|
||||
}
|
||||
return results;
|
||||
}
|
||||
|
||||
public int minCostSetTime(int startAt, int moveCost, int pushCost, int targetSeconds) {
|
||||
int ss = targetSeconds % 60;
|
||||
int mm = targetSeconds / 60;
|
||||
if (mm == 100) {
|
||||
mm = 99;
|
||||
ss += 60;
|
||||
}
|
||||
int[] nums = new int[4];
|
||||
nums[0] = mm / 10;
|
||||
nums[1] = mm % 10;
|
||||
nums[2] = ss / 10;
|
||||
nums[3] = ss % 10;
|
||||
int cost1 = 0;
|
||||
int temp = startAt;
|
||||
int i = 0;
|
||||
for (; i < 4; i++) {
|
||||
if (nums[i] > 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (; i < 4; i++) {
|
||||
if (nums[i] == temp) {
|
||||
cost1 += pushCost;
|
||||
} else {
|
||||
cost1 += moveCost + pushCost;
|
||||
temp = nums[i];
|
||||
}
|
||||
}
|
||||
if (targetSeconds < 60 || ss >= 40) {
|
||||
return cost1;
|
||||
}
|
||||
ss += 60;
|
||||
mm -= 1;
|
||||
nums[0] = mm / 10;
|
||||
nums[1] = mm % 10;
|
||||
nums[2] = ss / 10;
|
||||
nums[3] = ss % 10;
|
||||
int cost2 = 0;
|
||||
temp = startAt;
|
||||
i = 0;
|
||||
for (; i < 4; i++) {
|
||||
if (nums[i] > 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (; i < 4; i++) {
|
||||
if (nums[i] == temp) {
|
||||
cost2 += pushCost;
|
||||
} else {
|
||||
cost2 += moveCost + pushCost;
|
||||
temp = nums[i];
|
||||
}
|
||||
}
|
||||
return Math.min(cost1, cost2);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user