# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1267263 | alexandros | Advertisement 2 (JOI23_ho_t2) | C++20 | 2095 ms | 29448 KiB |
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
vector<ll> X, E;
int main() {
bool allSame = true;
set<ll> s;
ll amount, n, p, result = 0, sn;
scanf("%lld", &amount);
for(ll i = 0; i < amount; i++)
{
scanf("%lld %lld", &p, &n);
if(i==0) sn = n;
else if(n != sn) allSame = false;
X.push_back(p);
E.push_back(n);
s.insert(p);
}
if(allSame) cout << s.size() << "\n";
else
{
vector<int> cover(amount, 0);
for (int i = 0; i < amount; i++) {
int m = 0;
m |= (1 << i);
for (int j = 0; j < amount; j++) {
if (i == j) continue;
long long dist = llabs(X[i] - X[j]);
long long diff = E[i] - E[j];
if (dist <= diff) {
m |= (1 << j);
}
}
cover[i] = m;
}
int fullMask = (1 << amount) - 1;
for (int k = 1; k <= amount; k++) {
vector<bool> isd(amount, false);
for (int i = amount - k; i < amount; i++) {
isd[i] = true;
}
do {
int combined = 0;
for (int i = 0; i < amount; i++) {
if (isd[i]) {
combined |= cover[i];
}
}
if (combined == fullMask) {
cout << k << "\n";
return 0;
}
} while (next_permutation(isd.begin(), isd.end()));
}
cout << amount << "\n";
}
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |