QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#460180 | #5531. ICC | fryan | 0 | 0ms | 4124kb | C++20 | 2.9kb | 2024-07-01 04:48:01 | 2024-07-01 04:48:02 |
answer
#include <algorithm>
#include <array>
#include <bitset>
#include <cassert>
#include <chrono>
#include <complex>
#include <cstdio>
#include <cstring>
#include <deque>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <list>
#include <map>
#include <memory>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <stack>
#include <string>
#include <tuple>
#include <vector>
#include "icc.h"
using namespace std;
#define all(x) begin(x), end(x)
#define sz(x) (int) (x).size()
struct dsu {
int n;
vector<int> r;
dsu() {}
dsu(int n) : n(n) {
r.resize(n);
fill(r.begin(),r.end(),-1);
}
int trace(int v) {
return (r[v] < 0 ? v : r[v] = trace(r[v]));
}
int size(int v) {
return -r[trace(v)];
}
int same_set(int u, int v) {
return (trace(u) == trace(v));
}
int unite(int u, int v) {
if ((u = trace(u)) == (v = trace(v))) {
return u;
}
if (-r[u] < -r[v]) swap(u,v);
r[u] += r[v];
r[v] = u;
return u;
}
};
vector<int> gen(int cyc, int len) {
vector<int> res; res.resize(len);
for (int b = 0; b < len; b += cyc) {
for (int i = b; i < min(len, b+cyc); i++) {
res[i] = (b/cyc)%2;
}
}
return res;
}
const int mxn = 1e2;
int aux1[mxn], aux2[mxn];
/*
int query(int la, int lb, int a[], int b[]) {
cout << "querying:\n";
for (int i = 0; i < la; i++) cout << a[i] << " ";
cout << "\n";
for (int i = 0; i < lb; i++) cout << b[i] << " ";
cout << "\n? - ";
int ans; cin >> ans;
return ans;
}
*/
int send_query(vector<int> &a, vector<int> &b) {
for (int i = 0; i < sz(a); i++) {
aux1[i] = a[i];
}
for (int i = 0; i < sz(b); i++) {
aux2[i] = b[i];
}
return query(sz(a), sz(b), aux1, aux2);
}
array<int,2> get_edge(vector<int> &a, vector<int> &b) {
if (sz(a) == 1 && sz(b) == 1) {
return {a[0], b[0]};
}
if (sz(a) < sz(b)) swap(a,b);
vector<int> a1, a2;
for (int i = 0; i < sz(a); i++) {
if (i%2 == 0) a1.push_back(a[i]);
else a2.push_back(a[i]);
}
if (send_query(a1, b)) {
return get_edge(a1,b);
}
return get_edge(a2,b);
}
void send_answer(int a, int b) {
// cout << "road: " << a << " " << b << "\n";
setRoad(a+1,b+1);
}
void run(int n) {
dsu ds(n);
for (int i = 1; i < n; i++) {
vector<int> cn;
for (int j = 0; j < n; j++) {
if (ds.trace(j) == j) {
cn.push_back(j);
}
}
for (int c = 1; c < 1e9; c *= 2) {
vector<int> mask = gen(c, sz(cn));
// for (auto i : mask) cout << i << " ";
// cout << "\n";
vector<int> a,b;
for (int i = 0; i < n; i++) {
int rep = lower_bound(all(cn), ds.trace(i)) - cn.begin();
if (mask[rep]) {a.push_back(i);}
else {b.push_back(i);}
}
if (send_query(a,b)) {
array<int,2> e = get_edge(a,b);
send_answer(e[0], e[1]);
ds.unite(e[0], e[1]);
break;
}
}
}
}
/*
signed main() {
run(5);
return 0;
}
*/
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 0
Wrong Answer
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3988kb
input:
1 1500 3 15 0 2 0.0 2.5 0 3.5 0 1 1
output:
0 Query cities not in range [1, n]
result:
wrong answer
Subtask #2:
score: 0
Wrong Answer
Test #3:
score: 0
Wrong Answer
time: 0ms
memory: 4008kb
input:
1 2500 4 50 0 0 0.0 3.5 0 2.5 5 1 1
output:
0 Query cities not in range [1, n]
result:
wrong answer
Subtask #3:
score: 0
Wrong Answer
Test #6:
score: 0
Wrong Answer
time: 0ms
memory: 3984kb
input:
1 2250 6 100 0.05 2.3 0.1 0.7 0 1.5 1.7 1.1 1
output:
0 Query cities not in range [1, n]
result:
wrong answer
Subtask #4:
score: 0
Wrong Answer
Test #10:
score: 0
Wrong Answer
time: 0ms
memory: 3988kb
input:
1 2000 5 100 0.01 1.00 0.10 1.70 0.00 1.50 5.0 1.20 1
output:
0 Query cities not in range [1, n]
result:
wrong answer
Subtask #5:
score: 0
Wrong Answer
Test #14:
score: 0
Wrong Answer
time: 0ms
memory: 4124kb
input:
1 1775 4 100 0.00 0.00 0.00 2.70 0.10 7.55 0.0 1.15 1
output:
0 Query cities not in range [1, n]
result:
wrong answer
Subtask #6:
score: 0
Wrong Answer
Test #20:
score: 0
Wrong Answer
time: 0ms
memory: 3984kb
input:
1 1625 5 100 0.00 0.00 0.00 3.00 0.00 1.00 0.0 3 1
output:
0 Query cities not in range [1, n]
result:
wrong answer