В классе n
учеников.Скоро будет межшкольный научный тест, в котором будут вопросы по 4 предметам, для простоты назовите их 1,2,3 и 4.В команде должно быть 2 студента.Любой студент в равной степени может быть хорошим или плохим по определенному предмету.
Мы заданы в качестве входных n строк, в каждой по 4 записи.Ученик хорош по i
-ому предмету, если i
-й столбец равен 1. Я должен выяснить общее количество способов, которыми школа может отправить команду, чтобы два ученика вместезнать все 4 предмета.
Например,
S1: 1 1 1 1
S2: 1 1 0 1
S3: 1 0 1 1
S4: 0 0 1 1
S5: 0 0 0 0
Ученик 1 может пойти с любым учеником, поскольку все предметы - его сила.=> 4
Студент 2 может пойти с S3 и S4, так как S2 хорош по предметам 1,2 и 4, а S3 и S4 хорошо по предмету 3. => 2 (Обратите внимание, что (S1, S2)было уже подсчитано)
S3 пойдет с одним хорошим у субъекта 2 => нет
S4: аналогично, нет.
Следовательно, ans = 4 + 2 = 6
Мое решение: -
ans=0;
//arr is the array containing subject-wise "strength" of students
for(int i=0;i<n;i++){
ArrayList<Integer> a=new ArrayList<>();
for(int j=0;j<4;j++)
if(arr[i][j]==0)
a.add(j);
if(a.size()==0)
ans+=n-i-1;
else
for(int j=i+1;j<n;j++){
bool=false;
for(int k=0;k<a.size();k++){
if(arr[j][a.get(k)]==0)
break;
bool=true;
}
if(bool)
ans++;
}
}
System.out.println(ans);
Теперь я знаю, что мое решение верное, но его временная сложность составляет O (n ^ 2), и я ищу лучшее решение длятак же.Спасибо!