Submission #90982

#TimeUsernameProblemLanguageResultExecution timeMemory
90982tincamateiCircle selection (APIO18_circle_selection)C++14
49 / 100
3075 ms352544 KiB
#include <bits/stdc++.h> using namespace std; unordered_map<int, unordered_map<int, vector<int> > > grid; const int MAX_N = 300000; int xc[1+MAX_N], yc[1+MAX_N], rc[1+MAX_N]; int rez[1+MAX_N]; int poz[1+MAX_N]; void rescale(int n, int d) { grid.clear(); for(int i = 1; i <= n; ++i) if(rez[i] == 0) grid[xc[i] / d][yc[i] / d].push_back(i); } bool cmp(int a, int b) { return rc[a] > rc[b] || (rc[a] == rc[b] && a < b); } double dist(int a, int b) { return sqrt((long long)(xc[a] - xc[b]) * (xc[a] - xc[b]) + (long long)(yc[a] - yc[b]) * (yc[a] - yc[b])); } int main() { #ifdef HOME FILE *fin = fopen("input.in", "r"); FILE *fout = fopen("output.out", "w"); #else FILE *fin = stdin; FILE *fout = stdout; #endif int n; int mnx, mny; mnx = mny = 1000000000; fscanf(fin, "%d", &n); for(int i = 1; i <= n; ++i) { fscanf(fin, "%d%d%d", &xc[i], &yc[i], &rc[i]); mnx = min(mnx, xc[i]); mny = min(mny, yc[i]); poz[i - 1] = i; } for(int i = 1; i <= n; ++i) { xc[i] -= mnx; yc[i] -= mny; } sort(poz, poz + n, cmp); int lastr = (1 << 30); rescale(n, lastr); for(int i = 0; i < n; ++i) { int p = poz[i]; if(rez[p] == 0) { while(rc[p] * 2 <= lastr) { lastr = rc[p]; rescale(n, lastr); } int x = xc[p] / lastr, y = yc[p] / lastr; for(int i = x - 2; i <= x + 2; ++i) for(int j = y - 2; j <= y + 2; ++j) { for(auto it: grid[i][j]) if(rez[it] == 0 && dist(p, it) <= rc[p] + rc[it]) rez[it] = p; } } } for(int i = 1; i <= n; ++i) fprintf(fout, "%d ", rez[i]); #ifdef HOME fclose(fin); fclose(fout); #endif return 0; }

Compilation message (stderr)

circle_selection.cpp: In function 'int main()':
circle_selection.cpp:42:8: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
  fscanf(fin, "%d", &n);
  ~~~~~~^~~~~~~~~~~~~~~
circle_selection.cpp:44:9: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   fscanf(fin, "%d%d%d", &xc[i], &yc[i], &rc[i]);
   ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...