So I checking out the “Analysis” for the Cutting Intervals problem and wrote this
void solve(int testcase) {
ll n, c; scanf("%lld %lld", &n, &c);
map<ll, ll> m;
fo(_, 0, n) {
ll tl, tr; scanf("%lld %lld", &tl, &tr);
++m[tl+1], --m[tr];
}
// iter(x, m) printf("{%lld: %lld}, ", x.first, x.second);
// printf("\n");
map<ll, ll> a;
ll j = 0;
auto mprev = m.begin(), mcurr = ++m.begin();
while (mcurr != m.end()) {
ll kprev = mprev->first, kcurr = mcurr->first;
// printf("%lld %lld\n", kprev, kcurr);
j += mprev->second;
a[j] += kcurr - kprev;
++mprev, ++mcurr;
}
// iter(x, a) printf("{%lld: %lld}, ", x.first, x.second);
// printf("\n");
ll res = n;
for (auto it = a.rbegin(); it != a.rend(); ++it) {
res += it->first * min(it->second, c);
c -= min(it->second, c);
if (c == 0) break;
}
printf("Case #%d: %lld\n", testcase, res);
}
I believe the macros are self-explanatory. This gave “Sample Failed”. However, it worked on my machine. So I sent a manual “Run Test” and the output was Case #1: 1144119736199078559
instead of Case #1: 7
. But then when I switched to cin
over scanf
it gave AC.
Any idea why?