Submission #164386

#TimeUsernameProblemLanguageResultExecution timeMemory
164386frodakcinAdriatic (CEOI13_adriatic)C++11
100 / 100
263 ms56868 KiB
#include <cstdio> #include <cstring> #include <cassert> using ll = long long; void min(int* a, int b) {return (void)(~b&&(b<*a||!~*a)?*a=b:0);} void max(int* a, int b) {return (void)(*a<b?*a=b:0);} int min(int a, int b) {return ~b&&b<a?b:a;} int max(int a, int b) {return a<b?b:a;} const int MN = 2.5e5 + 100; const int MX = 2.5e3 + 10; int N; int nx[MX], ny[MX]; ll v[MX][MX]; ll f[MN]; struct ISL { public: int x, y; void in(void) {scanf("%d%d", &x, &y);} void flip(void) {x = MX - x - 1, y = MX - y - 1;} }; ISL a[MN]; void solve(void) { memset(nx, -1, sizeof(nx)); memset(ny, -1, sizeof(ny)); memset(v, 0, sizeof(v)); for(int i = 0, x, y;i < N;++i) x = a[i].x, y = a[i].y, v[x][y] = 1LL, min(nx+(y+1), x), max(ny+(x-1), y); for(int i = 0;i+1 < MX;++i) max(ny+(MX-i-2), ny[MX-i-1]), min(nx+(i+1), nx[i]); for(int i = 0;i < MX;++i) { for(int j = MX-2;j >= 0;--j) v[i][j] += v[i][j+1]; if(i) for(int j = 0;j < MX;++j) v[i][j] += v[i-1][j]; } for(int i = 0;i < MX;++i) for(int j = MX-1;j >= 0;--j) if(v[i][j]) v[i][j] += v[min(i, nx[j])][max(j, ny[i])]; for(int i = 0;i < N;++i) f[i] += v[a[i].x][a[i].y] - 1; } int main(void) { scanf("%d", &N); for(int i = 0;i < N;++i) a[i].in(); solve(); for(int i = 0;i < N;++i) a[i].flip(); solve(); for(int i = 0;i < N;++i) printf("%lld\n", f[i]+N-1); return 0; }

Compilation message (stderr)

adriatic.cpp: In function 'int main()':
adriatic.cpp:57:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  scanf("%d", &N);
  ~~~~~^~~~~~~~~~
adriatic.cpp: In member function 'void ISL::in()':
adriatic.cpp:22:22: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  void in(void) {scanf("%d%d", &x, &y);}
                 ~~~~~^~~~~~~~~~~~~~~~
#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...