Submission #343982

#TimeUsernameProblemLanguageResultExecution timeMemory
343982spatarelStrange Device (APIO19_strange_device)C++17
100 / 100
792 ms34232 KiB
#include <stdio.h> #include <algorithm> #include <vector> struct Event { long long index; int add; }; bool operator < (const Event &a, const Event &b) { return a.index < b.index; } long long gcd(long long a, long long b) { long long r = a % b; while (r > 0) { a = b; b = r; r = a % b; } return b; } int main() { int n; long long A, B; scanf("%d%lld%lld", &n, &A, &B); long long AB = A / gcd(A, B + 1); if (AB < 2e18 / B) { // AB * B < 2e18 AB *= B; } else { AB = 2e18; } bool allMarked = false; std::vector<Event> events; for (int i = 0; i < n; i++) { long long l, r; scanf("%lld%lld", &l, &r); if (r - l + 1 >= AB) { allMarked = true; } else { l %= AB; r %= AB; events.push_back(Event{l, +1}); events.push_back(Event{r + 1, -1}); if (l > r) { events.push_back(Event{0, +1}); events.push_back(Event{AB, -1}); } } } std::sort(events.begin(), events.end()); int currentValue = 0; long long answer = 0; if (allMarked) { answer = AB; } else { long long currentPosition = 0; for (Event event : events) { if (currentValue > 0) { answer += event.index - currentPosition; } currentValue += event.add; currentPosition = event.index; /* printf("%lld %d (%d %lld)\n", event.index, event.add, currentValue, answer);//*/ } } printf("%lld\n", answer); return 0; }

Compilation message (stderr)

strange_device.cpp: In function 'int main()':
strange_device.cpp:27:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   27 |   scanf("%d%lld%lld", &n, &A, &B);
      |   ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
strange_device.cpp:38:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   38 |     scanf("%lld%lld", &l, &r);
      |     ~~~~~^~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...