Submission #64949242
Source Code Expand
#include <bits/stdc++.h> using namespace std; /*--------------------------------------------------------------*/ /* Morton‑(Z‑order) код */ /*--------------------------------------------------------------*/ static inline uint32_t interleaveBits(uint16_t x) { uint32_t v = x; v = (v | (v << 8)) & 0x00FF00FF; v = (v | (v << 4)) & 0x0F0F0F0F; v = (v | (v << 2)) & 0x33333333; v = (v | (v << 1)) & 0x55555555; return v; } static inline uint32_t morton(uint16_t x, uint16_t y) { return (interleaveBits(y) << 1) | interleaveBits(x); } /*--------------------------------------------------------------*/ /* Аппроксимационный Prim (O(g²)) */ /*--------------------------------------------------------------*/ vector<pair<int,int>> approximateMST(const vector<int>& v, const vector<int>& cx, const vector<int>& cy) { const int g = (int)v.size(); const long long INF = (1LL<<60); vector<long long> best(g, INF); vector<int> parent(g, -1); vector<char> used(g, 0); best[0] = 0; vector<pair<int,int>> edges; for (int step = 0; step < g; ++step) { int u = -1; long long b = INF; for (int i = 0; i < g; ++i) if (!used[i] && best[i] < b) { b = best[i]; u = i; } used[u] = 1; if (parent[u] != -1) edges.emplace_back(v[u], v[parent[u]]); for (int i = 0; i < g; ++i) if (!used[i]) { long long dx = cx[v[u]] - cx[v[i]]; long long dy = cy[v[u]] - cy[v[i]]; long long d2 = dx*dx + dy*dy; if (d2 < best[i]) { best[i] = d2; parent[i] = u; } } } return edges; // g‑1 рёбер } /*--------------------------------------------------------------*/ int main () { ios::sync_with_stdio(false); cin.tie(nullptr); /* ---------- чтение входа ---------- */ int N,M,Q,L,W; if(!(cin>>N>>M>>Q>>L>>W)) return 0; vector<int> G(M); for(int &g:G) cin>>g; vector<int> lx(N),rx(N),ly(N),ry(N); for(int i=0;i<N;++i) cin>>lx[i]>>rx[i]>>ly[i]>>ry[i]; /* ---------- оценка координат и Morton‑сортировка ---------- */ vector<int> cx(N), cy(N); // центры vector<uint32_t> code(N); // Z‑order код for(int i=0;i<N;++i){ cx[i]=(lx[i]+rx[i])>>1; cy[i]=(ly[i]+ry[i])>>1; code[i]=morton((uint16_t)cx[i],(uint16_t)cy[i]); } vector<int> order(N); iota(order.begin(),order.end(),0); sort(order.begin(),order.end(), [&](int a,int b){ return code[a]<code[b]; }); /* ---------- делим города на группы ---------- */ vector<vector<int>> groups; groups.reserve(M); int ptr=0; for(int g:G){ groups.emplace_back(order.begin()+ptr, order.begin()+ptr+g); ptr+=g; } /* ---------- основная часть: запросы / MST ---------- */ int queriesUsed = 0; vector<vector<pair<int,int>>> edges(M); for(int k=0;k<M;++k){ const auto& grp = groups[k]; int gsz = (int)grp.size(); /* --- попробуем получить идеальные рёбра через гадалку --- */ if(gsz>=2 && gsz<=L && queriesUsed < Q){ ++queriesUsed; cout << "? " << gsz; for(int id:grp) cout << ' ' << id; cout << endl; // обязательно \n + flush (endl flush’ит) /* получаем gsz-1 строк пар (u v) */ for(int i=0;i<gsz-1;++i){ int a,b; cin>>a>>b; edges[k].emplace_back(a,b); } }else if(gsz>=2){ /* --- fallback: приблизительный Prim по центрам --- */ edges[k] = approximateMST(grp,cx,cy); } /* если gsz==1 — рёбра не нужны */ } /* ---------- вывод окончательного решения ---------- */ cout << "!\n"; for(int k=0;k<M;++k){ const auto& grp = groups[k]; for(size_t i=0;i<grp.size();++i){ if(i) cout << ' '; cout << grp[i]; } cout << '\n'; for(auto [u,v] : edges[k]) cout << u << ' ' << v << '\n'; } cout.flush(); return 0; }
Submission Info
Submission Time | |
---|---|
Task | A - Oracle-Guided Road Network Planning |
User | mHuman |
Language | C++ 20 (gcc 12.2) |
Score | 18199542 |
Code Size | 4612 Byte |
Status | AC |
Exec Time | 32 ms |
Memory | 11528 KiB |
Judge Result
Set Name | test_ALL | ||
---|---|---|---|
Score / Max Score | 18199542 / 50000000000 | ||
Status |
|
Set Name | Test Cases |
---|---|
test_ALL | test_0000.txt, test_0001.txt, test_0002.txt, test_0003.txt, test_0004.txt, test_0005.txt, test_0006.txt, test_0007.txt, test_0008.txt, test_0009.txt, test_0010.txt, test_0011.txt, test_0012.txt, test_0013.txt, test_0014.txt, test_0015.txt, test_0016.txt, test_0017.txt, test_0018.txt, test_0019.txt, test_0020.txt, test_0021.txt, test_0022.txt, test_0023.txt, test_0024.txt, test_0025.txt, test_0026.txt, test_0027.txt, test_0028.txt, test_0029.txt, test_0030.txt, test_0031.txt, test_0032.txt, test_0033.txt, test_0034.txt, test_0035.txt, test_0036.txt, test_0037.txt, test_0038.txt, test_0039.txt, test_0040.txt, test_0041.txt, test_0042.txt, test_0043.txt, test_0044.txt, test_0045.txt, test_0046.txt, test_0047.txt, test_0048.txt, test_0049.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
test_0000.txt | AC | 32 ms | 11528 KiB |
test_0001.txt | AC | 27 ms | 10968 KiB |
test_0002.txt | AC | 26 ms | 10944 KiB |
test_0003.txt | AC | 28 ms | 10976 KiB |
test_0004.txt | AC | 28 ms | 11000 KiB |
test_0005.txt | AC | 27 ms | 10984 KiB |
test_0006.txt | AC | 27 ms | 10952 KiB |
test_0007.txt | AC | 27 ms | 10960 KiB |
test_0008.txt | AC | 26 ms | 10952 KiB |
test_0009.txt | AC | 27 ms | 10904 KiB |
test_0010.txt | AC | 28 ms | 11004 KiB |
test_0011.txt | AC | 27 ms | 11000 KiB |
test_0012.txt | AC | 27 ms | 10988 KiB |
test_0013.txt | AC | 27 ms | 10900 KiB |
test_0014.txt | AC | 27 ms | 10960 KiB |
test_0015.txt | AC | 28 ms | 10976 KiB |
test_0016.txt | AC | 27 ms | 10992 KiB |
test_0017.txt | AC | 27 ms | 11004 KiB |
test_0018.txt | AC | 27 ms | 10960 KiB |
test_0019.txt | AC | 27 ms | 10968 KiB |
test_0020.txt | AC | 28 ms | 10952 KiB |
test_0021.txt | AC | 27 ms | 10964 KiB |
test_0022.txt | AC | 27 ms | 10984 KiB |
test_0023.txt | AC | 27 ms | 10908 KiB |
test_0024.txt | AC | 27 ms | 11028 KiB |
test_0025.txt | AC | 27 ms | 10992 KiB |
test_0026.txt | AC | 28 ms | 11004 KiB |
test_0027.txt | AC | 27 ms | 10976 KiB |
test_0028.txt | AC | 27 ms | 10964 KiB |
test_0029.txt | AC | 28 ms | 10916 KiB |
test_0030.txt | AC | 28 ms | 10980 KiB |
test_0031.txt | AC | 27 ms | 10916 KiB |
test_0032.txt | AC | 28 ms | 10952 KiB |
test_0033.txt | AC | 28 ms | 10964 KiB |
test_0034.txt | AC | 27 ms | 10996 KiB |
test_0035.txt | AC | 27 ms | 10960 KiB |
test_0036.txt | AC | 27 ms | 10996 KiB |
test_0037.txt | AC | 27 ms | 10912 KiB |
test_0038.txt | AC | 27 ms | 10964 KiB |
test_0039.txt | AC | 27 ms | 10908 KiB |
test_0040.txt | AC | 28 ms | 11032 KiB |
test_0041.txt | AC | 27 ms | 10908 KiB |
test_0042.txt | AC | 27 ms | 10956 KiB |
test_0043.txt | AC | 27 ms | 10992 KiB |
test_0044.txt | AC | 27 ms | 10996 KiB |
test_0045.txt | AC | 27 ms | 10912 KiB |
test_0046.txt | AC | 27 ms | 10992 KiB |
test_0047.txt | AC | 28 ms | 10920 KiB |
test_0048.txt | AC | 27 ms | 10996 KiB |
test_0049.txt | AC | 28 ms | 10984 KiB |