双周赛68
This commit is contained in:
parent
a14ed17dfb
commit
0502cf75f2
94
src/main/java/contest/y2021/m12/dw/SolutionD68.java
Normal file
94
src/main/java/contest/y2021/m12/dw/SolutionD68.java
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
package contest.y2021.m12.dw;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
public class SolutionD68 {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
SolutionD68 solution = new SolutionD68();
|
||||||
|
// solution.findAllRecipes(new String[]{"bread"}, Arrays.asList(Arrays.asList("yeast", "flour")), new String[]{"yeast", "flour", "corn"});
|
||||||
|
// solution.abbreviateProduct(1,99999);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int mostWordsFound(String[] sentences) {
|
||||||
|
int max = 0;
|
||||||
|
for (String str : sentences) {
|
||||||
|
max = Math.max(str.split(" ").length, max);
|
||||||
|
}
|
||||||
|
return max;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> findAllRecipes(String[] recipes, List<List<String>> ingredients, String[] supplies) {
|
||||||
|
Map<String, Integer> map = new HashMap<>();
|
||||||
|
for (int i = 0; i < recipes.length; i++) {
|
||||||
|
map.put(recipes[i], i);
|
||||||
|
}
|
||||||
|
List<String> sup = Arrays.asList(supplies);
|
||||||
|
use = new int[recipes.length];
|
||||||
|
list = new ArrayList<>();
|
||||||
|
for (int i = 0; i < recipes.length; i++) {
|
||||||
|
use[i] = dfs(recipes[i], ingredients, sup, map);
|
||||||
|
}
|
||||||
|
HashSet<String> set = new HashSet<>(list);
|
||||||
|
list.clear();
|
||||||
|
list.addAll(set);
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
int[] use;
|
||||||
|
List<String> list;
|
||||||
|
|
||||||
|
private int dfs(String strs, List<List<String>> ingredients, List<String> sup, Map<String, Integer> map) {
|
||||||
|
int i = map.get(strs);
|
||||||
|
if (use[i] > 0) {
|
||||||
|
return use[i];
|
||||||
|
}
|
||||||
|
boolean bl = true;
|
||||||
|
for (String str : ingredients.get(i)) {
|
||||||
|
if ((list != null && list.contains(str)) || sup.contains(str)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (map.containsKey(str) && use[map.get(str)] == 0) {
|
||||||
|
if (use[map.get(str)] == 3) {
|
||||||
|
use[map.get(str)] = 2;
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
use[i] = 3;
|
||||||
|
if (dfs(str, ingredients, sup, map) == 2) {
|
||||||
|
bl = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
bl = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (bl) {
|
||||||
|
list.add(strs);
|
||||||
|
}
|
||||||
|
return bl ? 1 : 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public boolean canBeValid(String s, String locked) {
|
||||||
|
int n = s.length();
|
||||||
|
int min = 0;
|
||||||
|
int max = 0;
|
||||||
|
for (int i = 0; i < n; i++) {
|
||||||
|
if (locked.charAt(i) == '0') {
|
||||||
|
min = Math.max(min - 1, 0);
|
||||||
|
max += 1;
|
||||||
|
} else if (s.charAt(i) == '(') {
|
||||||
|
min += 1;
|
||||||
|
max += 1;
|
||||||
|
} else {
|
||||||
|
min = Math.max(min - 1, 0);
|
||||||
|
max -= 1;
|
||||||
|
if (max < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return min == 0 && max % 2 == 0;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user