天梯赛 L2-005 集合相似度 java
·

后两个案例超时,有大佬指导一下吗。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
List<Set<String>> list = new ArrayList<>();
for (int i = 0; i < n; i++) {
list.add(new HashSet<>());
String s[] = br.readLine().split(" ");
for (int j = 1; j < s.length; j++) {
if (!list.get(i).contains(s[j])) {
list.get(i).add(s[j]);
}
}
}
int k = Integer.parseInt(br.readLine());
for (int i = 0; i < k; i++) {
String s[] = br.readLine().split(" ");
double sum = 0;
if (list.get(Integer.parseInt(s[0])-1).size() >= list.get(Integer.parseInt(s[1])-1).size()) {//选择两个集合中小的进行遍历
for (String num : list.get(Integer.parseInt(s[1])-1)) {
if (list.get(Integer.parseInt(s[0])-1).contains(num)) {
sum++;
}
}
}else {
for (String num : list.get(Integer.parseInt(s[0])-1)){
if (list.get(Integer.parseInt(s[1])-1).contains(num)) {
sum++;
}
}
}
double result = sum*100 / (list.get(Integer.parseInt(s[0])-1).size() + list.get(Integer.parseInt(s[1])-1).size()-sum);
String rst=String.format("%.2f",result);
System.out.println(rst+"%");
}
}
}
更多推荐




所有评论(0)