STUDCOMP
Author: sigma_g
Tester: multiple, see announcement
Editorialist: sigma_g
DIFFICULTY:
EASY
PREREQUISITES:
Sets
PROBLEM
Determine - for each j - whether a set of indices exists such that all elements in it have m_i lower than that of m_j, but their sum of a_i is larger than that of a_j.
Buggy code plain text
QUICK EXPLANATION
Spoiler
The code uses set
whereas it should be using multiset
, for the appreciation values.
EXPLANATION
Step 1
Note that there are other possible decoy bugs in this problem. For example, you might think the complexity of the inner loop (for (auto x : apps)
) is linear in n
, and consider this problem a candidate for TLE. However, the inner if
condition will break within 20 iterations (as 20 >= a[i] >= 1
, so there is no TLE in this problem.
Step 2
Note that there might be duplicates in the appreciation values a
. Is there a bug in the code related to this?
Step 3
The set<int> apps
has to be a multiset<int>
. Any careful testcase with repeating values of a
will exploit this, for example:
3
2 3 4
4 4 7
But not all repeating values will work, for example, something simpler like:
2
2 3
4 4
doesn’t hack the buggy solution.
Setter’s solution
Text
5
1 1 1 1 10
5 5 5 5 20