제출 #90969

#제출 시각아이디문제언어결과실행 시간메모리
90969tincamatei원 고르기 (APIO18_circle_selection)C++14
12 / 100
1411 ms52044 KiB
#include <bits/stdc++.h> using namespace std; const int MAX_N = 300000; int xc[1+MAX_N], yc[1+MAX_N], rc[1+MAX_N]; int poz[1+MAX_N], rez[1+MAX_N]; long long ld[1+MAX_N], rd[1+MAX_N]; set<pair<long long, int>> sl, sr; bool cmp(int a, int b) { return rc[a] > rc[b] || (rc[a] == rc[b] && a < b); } double dist(int xa, int ya, int xb, int yb) { return sqrt((long long)(xa - xb) * (xa - xb) + (long long)(ya - yb) * (ya - yb)); } 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, ox, oy, 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]); } ox = oy = -2000000000; for(int i = 1; i <= n; ++i) { xc[i] -= mnx; yc[i] -= mny; long long d = llabs(ox - xc[i]) + llabs(oy - yc[i]); ld[i] = d - rc[i]; rd[i] = d + rc[i]; sl.insert(make_pair(ld[i], i)); sr.insert(make_pair(rd[i], i)); poz[i - 1] = i; } sort(poz, poz + n, cmp); for(int i = 0; i < n; ++i) { int x = poz[i]; if(rez[x] == 0) { set<pair<long long, int> >::iterator it; it = sl.lower_bound(make_pair(ld[x], -1)); while(it != sl.end() && it->first <= rd[x]) { int todel = it->second; if((long long)(rc[x] + rc[todel]) * (rc[x] + rc[todel]) >= (long long)(xc[x] - xc[todel]) * (xc[x] - xc[todel]) + (long long)(yc[x] - yc[todel]) * (yc[x] - yc[todel])) { rez[todel] = x; sr.erase(make_pair(rd[todel], todel)); it = sl.erase(it); } else it++; } it = sr.lower_bound(make_pair(ld[x], -1)); while(it != sr.end() && it->first <= rd[x]) { int todel = it->second; if((long long)(rc[x] + rc[todel]) * (rc[x] + rc[todel]) >= (long long)(xc[x] - xc[todel]) * (xc[x] - xc[todel]) + (long long)(yc[x] - yc[todel]) * (yc[x] - yc[todel])) { rez[todel] = x; sl.erase(make_pair(ld[todel], todel)); it = sr.erase(it); } else it++; } } } for(int i = 1; i <= n; ++i) fprintf(fout, "%d ", rez[i]); #ifdef HOME fclose(fin); fclose(fout); #endif return 0; }

컴파일 시 표준 에러 (stderr) 메시지

circle_selection.cpp: In function 'int main()':
circle_selection.cpp:34: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:37: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...