#pragma GCC optimize("O3")
#include<bits/stdc++.h>
using namespace std;
bool are_connected(std::vector<int> A, std::vector<int> B);
void add(vector<int> &a,vector<int> &b){
reverse(a.begin(),a.end());
for(auto i : b)a.push_back(i);
}
bool query(vector<int> &a,vector<int> &b,int l1,int r1,int l2,int r2){
vector<int> tmp1,tmp2;
for(int i=l1;i<=r1;i++)tmp1.push_back(a[i]);
for(int i=l2;i<=r2;i++)tmp2.push_back(b[i]);
return are_connected(tmp1,tmp2);
}
bool comp(vector<int> &a,vector<int> &b){
return a.size()<b.size();
}
mt19937 rng((uint64_t) chrono::duration_cast<chrono::
nanoseconds>(chrono::high_resolution_clock::now()
.time_since_epoch()).count());
vector<int> longest_trip(int N, int D)
{
srand(time(NULL));
deque<vector<int>> q;
for(int i=0;i<N;i++){
q.push_back({i});
}
shuffle(q.begin(),q.end(),rng);
int cont=0;
while(q.size()>2){
//shuffle(q.begin(),q.end(),rng);
sort(q.begin(),q.end(),comp);
shuffle(q.begin(),q.begin()+3,rng);
auto a = q.front();
q.pop_front();
auto b = q.front();
q.pop_front();
auto c = q.front();
q.pop_front();
//if(rng()%2)reverse(a.begin(),a.end());
//if(rng()%2)reverse(b.begin(),b.end());
//if(rng()%2)reverse(c.begin(),c.end());
if(are_connected({*a.begin()},{*b.begin()})){
cont++;
}else if(are_connected({*a.begin()},{*c.begin()})){
swap(b,c);
cont+=2;
}else{
cont+=2;
swap(a,c);
}
add(a,b);
q.push_back(a);
q.push_front(c);
}
assert(cont<400);
auto a = q.front();
q.pop_front();
auto b = q.front();
q.pop_front();
if(!are_connected(a,b)){
if(a.size()>b.size())return a;
else return b;
}else{
int l1 = *a.begin(), r1 = a.back();
int l2 = *b.begin(), r2 = b.back();
if(are_connected({l1},{l2})){
add(a,b);
return a;
}
if(are_connected({l1},{r2})){
reverse(b.begin(),b.end());
add(a,b);
return a;
}
if(are_connected({l2},{r1})){
reverse(a.begin(),a.end());
add(a,b);
return a;
}
int low = -1, up = a.size()-1;
while(up-low>1){
int mid = (up+low)/2;
if(query(a,b,0,mid,0,b.size()-1)){
up=mid;
}else{
low=mid;
}
}
int ind = up;
low = -1, up = b.size()-1;
while(up-low>1){
int mid = (up+low)/2;
if(query(a,b,ind,ind,0,mid)){
up=mid;
}else{
low=mid;
}
}
for(int i=0;i<ind;i++){
a.push_back(*a.begin());
a.erase(a.begin());
}
for(int i=0;i<up;i++){
b.push_back(*b.begin());
b.erase(b.begin());
}
add(a,b);
return a;
}
}
/*
1
5 1
1
1 1
0 0 1
0 0 0 1
static inline constexpr int maxNumberOfCalls = 32640;
static inline constexpr int maxTotalNumberOfCalls = 150000;
static inline constexpr int maxTotalNumberOfLandmarksInCalls = 1500000;
static int call_counter = 0;
static int total_call_counter = 0;
static int landmark_counter = 0;
static int C, N, D;
static std::vector<std::vector<int>> U;
static std::vector<bool> present;
static inline void protocol_violation(std::string message)
{
printf("Protocol Violation: %s\n", message.c_str());
exit(0);
}
bool are_connected(std::vector<int> A, std::vector<int> B)
{
++call_counter;
++total_call_counter;
if (call_counter > maxNumberOfCalls || total_call_counter > maxTotalNumberOfCalls)
{
protocol_violation("too many calls");
}
int nA = A.size(), nB = B.size();
landmark_counter += nA + nB;
if (landmark_counter > maxTotalNumberOfLandmarksInCalls)
{
protocol_violation("too many elements");
}
if (nA == 0 || nB == 0)
{
protocol_violation("invalid array");
}
for (int i = 0; i < nA; ++i)
{
if (A[i] < 0 || N <= A[i])
{
protocol_violation("invalid array");
}
if (present[A[i]])
{
protocol_violation("invalid array");
}
present[A[i]] = true;
}
for (int i = 0; i < nA; ++i)
{
present[A[i]] = false;
}
for (int i = 0; i < nB; ++i)
{
if (B[i] < 0 || N <= B[i])
{
protocol_violation("invalid array");
}
if (present[B[i]])
{
protocol_violation("invalid array");
}
present[B[i]] = true;
}
for (int i = 0; i < nB; ++i)
{
present[B[i]] = false;
}
for (int i = 0; i < nA; ++i)
{
for (int j = 0; j < nB; ++j)
{
if (A[i] == B[j])
{
protocol_violation("non-disjoint arrays");
}
}
}
for (int i = 0; i < nA; ++i)
{
for (int j = 0; j < nB; ++j)
{
if (U[std::max(A[i], B[j])][std::min(A[i], B[j])] == 1)
{
return true;
}
}
}
return false;
}
int main()
{
assert(1 == scanf("%d", &C));
int maximumCalls = 0;
for (int c = 0; c < C; ++c)
{
call_counter = 0;
assert(2 == scanf("%d %d", &N, &D));
present.assign(N, false);
U.resize(N);
for (int i = 1; i < N; ++i)
{
U[i].resize(i);
for (int j = 0; j < i; ++j)
{
assert(1 == scanf("%d", &U[i][j]));
}
}
for (int i = 2; i < N; ++i)
{
for (int j = 1; j < i; ++j)
{
for (int k = 0; k < j; ++k)
{
if (U[i][j] + U[i][k] + U[j][k] < D)
{
printf("Insufficient Density\n");
exit(0);
}
}
}
}
std::vector<int> t = longest_trip(N, D);
int l = t.size();
printf("%d\n", l);
for (int i = 0; i < l; ++i)
{
printf(i == 0 ? "%d" : " %d", t[i]);
}
printf("\n");
printf("%d chiamate\n", call_counter);
maximumCalls = std::max(maximumCalls, call_counter);
call_counter = 0;
}
printf("%d max chiamate\n", maximumCalls);
return 0;
}
*/
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
0 ms |
208 KB |
Output is correct |
2 |
Correct |
3 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
208 KB |
Output is correct |
2 |
Correct |
9 ms |
208 KB |
Output is correct |
3 |
Correct |
8 ms |
208 KB |
Output is correct |
4 |
Correct |
9 ms |
320 KB |
Output is correct |
5 |
Correct |
12 ms |
208 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
8 ms |
208 KB |
Output is correct |
2 |
Correct |
10 ms |
208 KB |
Output is correct |
3 |
Correct |
8 ms |
208 KB |
Output is correct |
4 |
Correct |
11 ms |
312 KB |
Output is correct |
5 |
Correct |
14 ms |
328 KB |
Output is correct |
6 |
Correct |
11 ms |
208 KB |
Output is correct |
7 |
Correct |
7 ms |
208 KB |
Output is correct |
8 |
Correct |
8 ms |
208 KB |
Output is correct |
9 |
Correct |
8 ms |
320 KB |
Output is correct |
10 |
Correct |
9 ms |
344 KB |
Output is correct |
11 |
Correct |
14 ms |
336 KB |
Output is correct |
12 |
Correct |
11 ms |
336 KB |
Output is correct |
13 |
Correct |
11 ms |
328 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
208 KB |
Output is correct |
2 |
Correct |
8 ms |
208 KB |
Output is correct |
3 |
Correct |
9 ms |
208 KB |
Output is correct |
4 |
Correct |
9 ms |
304 KB |
Output is correct |
5 |
Correct |
9 ms |
208 KB |
Output is correct |
6 |
Correct |
11 ms |
208 KB |
Output is correct |
7 |
Correct |
8 ms |
208 KB |
Output is correct |
8 |
Correct |
8 ms |
304 KB |
Output is correct |
9 |
Correct |
9 ms |
208 KB |
Output is correct |
10 |
Correct |
10 ms |
320 KB |
Output is correct |
11 |
Correct |
10 ms |
208 KB |
Output is correct |
12 |
Correct |
10 ms |
332 KB |
Output is correct |
13 |
Correct |
11 ms |
332 KB |
Output is correct |
14 |
Correct |
9 ms |
208 KB |
Output is correct |
15 |
Correct |
9 ms |
208 KB |
Output is correct |
16 |
Correct |
10 ms |
208 KB |
Output is correct |
17 |
Correct |
10 ms |
208 KB |
Output is correct |
18 |
Correct |
9 ms |
208 KB |
Output is correct |
19 |
Correct |
11 ms |
208 KB |
Output is correct |
20 |
Correct |
8 ms |
208 KB |
Output is correct |
21 |
Correct |
11 ms |
328 KB |
Output is correct |
22 |
Correct |
14 ms |
348 KB |
Output is correct |
23 |
Correct |
11 ms |
208 KB |
Output is correct |
24 |
Correct |
12 ms |
332 KB |
Output is correct |
25 |
Correct |
10 ms |
208 KB |
Output is correct |
26 |
Correct |
6 ms |
208 KB |
Output is correct |
27 |
Correct |
13 ms |
208 KB |
Output is correct |
28 |
Correct |
13 ms |
208 KB |
Output is correct |
29 |
Correct |
6 ms |
208 KB |
Output is correct |
30 |
Correct |
10 ms |
208 KB |
Output is correct |
31 |
Correct |
10 ms |
208 KB |
Output is correct |
32 |
Correct |
12 ms |
208 KB |
Output is correct |
33 |
Correct |
11 ms |
208 KB |
Output is correct |
34 |
Correct |
14 ms |
208 KB |
Output is correct |
35 |
Correct |
13 ms |
208 KB |
Output is correct |
36 |
Correct |
12 ms |
328 KB |
Output is correct |
37 |
Correct |
13 ms |
208 KB |
Output is correct |
38 |
Correct |
13 ms |
208 KB |
Output is correct |
39 |
Correct |
13 ms |
292 KB |
Output is correct |
40 |
Correct |
18 ms |
316 KB |
Output is correct |
41 |
Correct |
14 ms |
208 KB |
Output is correct |
42 |
Correct |
16 ms |
328 KB |
Output is correct |
43 |
Correct |
13 ms |
208 KB |
Output is correct |
44 |
Correct |
12 ms |
208 KB |
Output is correct |
45 |
Correct |
10 ms |
208 KB |
Output is correct |
46 |
Correct |
14 ms |
208 KB |
Output is correct |
47 |
Correct |
10 ms |
208 KB |
Output is correct |
48 |
Correct |
16 ms |
208 KB |
Output is correct |
49 |
Correct |
7 ms |
208 KB |
Output is correct |
50 |
Correct |
10 ms |
208 KB |
Output is correct |
51 |
Correct |
16 ms |
208 KB |
Output is correct |
52 |
Correct |
14 ms |
208 KB |
Output is correct |
53 |
Correct |
12 ms |
300 KB |
Output is correct |
54 |
Correct |
12 ms |
312 KB |
Output is correct |
55 |
Correct |
10 ms |
208 KB |
Output is correct |
56 |
Correct |
16 ms |
208 KB |
Output is correct |
57 |
Correct |
12 ms |
332 KB |
Output is correct |
58 |
Correct |
14 ms |
336 KB |
Output is correct |
59 |
Correct |
15 ms |
316 KB |
Output is correct |
60 |
Correct |
16 ms |
328 KB |
Output is correct |
61 |
Correct |
14 ms |
336 KB |
Output is correct |
62 |
Correct |
15 ms |
320 KB |
Output is correct |
63 |
Correct |
13 ms |
324 KB |
Output is correct |
64 |
Correct |
16 ms |
332 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
10 ms |
208 KB |
Output is correct |
2 |
Correct |
9 ms |
208 KB |
Output is correct |
3 |
Correct |
8 ms |
208 KB |
Output is correct |
4 |
Correct |
9 ms |
324 KB |
Output is correct |
5 |
Correct |
13 ms |
328 KB |
Output is correct |
6 |
Correct |
12 ms |
208 KB |
Output is correct |
7 |
Correct |
7 ms |
208 KB |
Output is correct |
8 |
Correct |
11 ms |
208 KB |
Output is correct |
9 |
Correct |
11 ms |
316 KB |
Output is correct |
10 |
Correct |
10 ms |
316 KB |
Output is correct |
11 |
Correct |
11 ms |
328 KB |
Output is correct |
12 |
Correct |
11 ms |
324 KB |
Output is correct |
13 |
Correct |
14 ms |
328 KB |
Output is correct |
14 |
Correct |
9 ms |
208 KB |
Output is correct |
15 |
Correct |
9 ms |
208 KB |
Output is correct |
16 |
Correct |
9 ms |
208 KB |
Output is correct |
17 |
Correct |
13 ms |
208 KB |
Output is correct |
18 |
Correct |
11 ms |
208 KB |
Output is correct |
19 |
Correct |
14 ms |
316 KB |
Output is correct |
20 |
Correct |
9 ms |
312 KB |
Output is correct |
21 |
Correct |
11 ms |
208 KB |
Output is correct |
22 |
Correct |
10 ms |
208 KB |
Output is correct |
23 |
Correct |
11 ms |
208 KB |
Output is correct |
24 |
Correct |
9 ms |
208 KB |
Output is correct |
25 |
Correct |
10 ms |
208 KB |
Output is correct |
26 |
Correct |
10 ms |
208 KB |
Output is correct |
27 |
Correct |
11 ms |
208 KB |
Output is correct |
28 |
Correct |
13 ms |
304 KB |
Output is correct |
29 |
Correct |
10 ms |
208 KB |
Output is correct |
30 |
Correct |
14 ms |
304 KB |
Output is correct |
31 |
Correct |
12 ms |
208 KB |
Output is correct |
32 |
Correct |
12 ms |
208 KB |
Output is correct |
33 |
Correct |
13 ms |
208 KB |
Output is correct |
34 |
Correct |
9 ms |
208 KB |
Output is correct |
35 |
Correct |
15 ms |
208 KB |
Output is correct |
36 |
Correct |
15 ms |
208 KB |
Output is correct |
37 |
Correct |
11 ms |
308 KB |
Output is correct |
38 |
Correct |
13 ms |
208 KB |
Output is correct |
39 |
Correct |
10 ms |
208 KB |
Output is correct |
40 |
Correct |
11 ms |
208 KB |
Output is correct |
41 |
Correct |
12 ms |
208 KB |
Output is correct |
42 |
Correct |
16 ms |
208 KB |
Output is correct |
43 |
Correct |
11 ms |
208 KB |
Output is correct |
44 |
Correct |
11 ms |
328 KB |
Output is correct |
45 |
Correct |
12 ms |
304 KB |
Output is correct |
46 |
Correct |
12 ms |
316 KB |
Output is correct |
47 |
Correct |
13 ms |
208 KB |
Output is correct |
48 |
Correct |
12 ms |
324 KB |
Output is correct |
49 |
Correct |
13 ms |
208 KB |
Output is correct |
50 |
Correct |
12 ms |
208 KB |
Output is correct |
51 |
Correct |
13 ms |
208 KB |
Output is correct |
52 |
Correct |
19 ms |
208 KB |
Output is correct |
53 |
Correct |
12 ms |
320 KB |
Output is correct |
54 |
Runtime error |
10 ms |
444 KB |
Execution killed with signal 6 |
55 |
Halted |
0 ms |
0 KB |
- |