제출 #771741

#제출 시각아이디문제언어결과실행 시간메모리
771741CyberCow원 고르기 (APIO18_circle_selection)C++17
7 / 100
1203 ms77048 KiB
//#include <bits/stdc++.h> #include <random> #include <algorithm> #include <bitset> #include <chrono> #include <cmath> #include <deque> #include <fstream> #include <iomanip> #include <iostream> #include <iterator> #include <map> #include <queue> #include <set> #include <stack> #include <string> #include <unordered_map> #include <unordered_set> #include <vector> #include <chrono> #define fr first #define sc second #define ad push_back using namespace std; using ll = long long; mt19937 rnd(348502); const int N = 300005; vector<pair<ll, pair<ll, ll>>> v; ll color[N]; ll ans[N]; void solve() { ll n, i, j, x, y, r; cin >> n; if (n <= 5000) { for (i = 0; i < n; i++) { cin >> x >> y >> r; v.push_back({ r, {x, y} }); } ll qan = 0; for (i = 0; i < n; i++) { ll ma = 0; for (j = 0; j < n; j++) { if (color[j] == 0) { ma = max(v[j].first, ma); } } for (j = 0; j < n; j++) { if (color[j] == 0 && v[j].first == ma) { color[j] = 1; ans[j] = j + 1; qan++; for (ll h = 0; h < n; h++) { if (color[h] == 0 && (v[j].second.first - v[h].second.first) * (v[j].second.first - v[h].second.first) + (v[j].second.second - v[h].second.second) * (v[j].second.second - v[h].second.second) <= (v[j].first + v[h].first) * (v[j].first + v[h].first)) { color[h] = 1; ans[h] = j + 1; qan++; } } break; } } if (qan == n) break; } for (i = 0; i < n; i++) { cout << ans[i] << ' '; } } else { set<pair<pair<ll, ll>, ll>> mar; set<pair<ll, ll>> hert; set<pair<ll, ll>> hert1; for (i = 0; i < n; i++) { cin >> x >> y >> r; v.push_back({ r, {x, y} }); mar.insert({ {r, -i}, x}); hert.insert({ x + r, i }); hert1.insert({ x - r, i }); } ll qan = 0; while (!mar.empty()) { qan++; x = (--mar.end())->second; r = (--mar.end())->first.first; ll ind = -(--mar.end())->first.second; color[ind] = 1; ans[ind] = ind + 1; auto gn = hert.lower_bound({ x, -1 }); vector<pair<ll, ll>> herthan1, herthan; while (1) { if (gn == hert.end()) gn--; ll xx = gn->first; ll indind = gn->second; if (xx >= x- r) { color[indind] = 1; ans[indind] = ind + 1; herthan.push_back({xx, indind}); } else break; if (gn == hert.begin()) break; else gn--; } auto gn1 = hert1.lower_bound({ x, -1 }); while (1) { if (gn1 == hert1.end()) break; ll xx = gn1->first; ll indind = gn1->second; if (xx <= x + r) { color[indind] = 1; ans[indind] = ind + 1; herthan1.push_back({ xx, indind }); } else break; gn1++; } for ( i = 0; i < herthan.size(); i++) { hert.erase(herthan[i]); mar.erase({ {v[herthan[i].second].first, -herthan[i].second}, v[herthan[i].second].second.first}); } for (i = 0; i < herthan1.size(); i++) { hert1.erase(herthan1[i]); mar.erase({ {v[herthan1[i].second].first, -herthan1[i].second}, v[herthan1[i].second].second.first }); } } for ( i = 0; i < n; i++) { cout << ans[i] << ' '; } } } int main() { ios_base::sync_with_stdio(false); cin.tie(0); ll tt = 1; //cin >> tt; while (tt--) { solve(); } return 0; }

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

circle_selection.cpp: In function 'void solve()':
circle_selection.cpp:141:28: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  141 |             for ( i = 0; i < herthan.size(); i++)
      |                          ~~^~~~~~~~~~~~~~~~
circle_selection.cpp:146:27: warning: comparison of integer expressions of different signedness: 'll' {aka 'long long int'} and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  146 |             for (i = 0; i < herthan1.size(); 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...