#include "longesttrip.h"
#include<bits/stdc++.h>
using namespace std;
vector<int>longest_trip_3(int N){
vector<int>ans;
for(int i=0;i<N;i++)ans.push_back(i);
return ans;
}
vector<int>longest_trip_2(int N){
vector<int>ans;
vector<int>tans;
tans.push_back(0);
for(int i=1;i<N;i++){
if(are_connected({i-1},{i}))tans.push_back(i);
else if(i!=N-1)tans.push_back(i+1),tans.push_back(i),i++;
else ans.push_back(i);
}
for(auto x:tans)ans.push_back(x);
return ans;
}
int vis[256];
int fnext(int x,int sz){
if(sz==0)return -1;
//cerr<<"fnext:"<<x<<" "<<sz<<"\n";
int st=1,en=sz,ans=0;
int id=-1;
vector<int>ask;
while(st<=en){
int m=(st+en)/2;
ask.clear();
int cur=0;
while(ask.size()<m){
if(!vis[cur])ask.push_back(cur);
cur++;
}
//cerr<<m<<" ask:";
//for(auto x:ask)cerr<<x<<" ";
//cerr<<"\n";
if(are_connected({x},ask)){
en=m-1;
ans=m;
id=cur-1;
}else{
st=m+1;
}
}
return id;
}
pair<int,int> fincom(int x,vector<int>ans){
int sz=ans.size();
//cerr<<"fnext:"<<x<<" "<<sz<<"\n";
int st=0,en=sz-1;
int id=-1,pos=-1;
vector<int>ask;
while(st<=en){
int m=(st+en)/2;
ask.clear();
for(int i=0;i<=m;i++)ask.push_back(ans[i]);
if(are_connected({x},ask)){
en=m-1;
id=ans[m];
pos=m;
}else{
st=m+1;
}
}
return {id,pos};
}
vector<int>longest_trip_1(int N){
for(int i=0;i<256;i++)vis[i]=0;
vector<int>ans;
vector<int>rans;
vector<int>ians;
ans.push_back(0);
vis[0]=1;
int cur=0,left=N-1;
while(1){
//cerr<<cur<<"\n";
int x=fnext(cur,left);
if(x!=-1){
cur=x;
left--;
ans.push_back(cur);
vis[cur]++;
}else{
break;
}
}
for(int i=0;i<N;i++)if(!vis[i])ians.push_back(i);
if(ans.size()==N)return ans;
int outcom=-1;
for(int i=0;i<N;i++){
if(!vis[i]){
outcom=i;
break;
}
}
auto x=fincom(outcom,ans);
int check=are_connected(ans,ians);
if(!check)return ans.size()>ians.size()?ans:ians;
for(int i=0;i<=x.second;i++)rans.push_back(ans[i]);
for(int i=0;i<N;i++)if(!vis[i])rans.push_back(i);
for(int i=x.second+1;i<ans.size();i++)rans.push_back(ans[i]);
assert(rans.size()>=ans.size());
return rans;
}
vector<int> longest_trip(int N, int D)
{
if(D==1)return longest_trip_1(N);
else if(D==2)return longest_trip_2(N);
else return longest_trip_3(N);
//cerr<<"end of query\n";
return {};
}
Compilation message
longesttrip.cpp: In function 'int fnext(int, int)':
longesttrip.cpp:32:25: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
32 | while(ask.size()<m){
| ~~~~~~~~~~^~
longesttrip.cpp:25:20: warning: variable 'ans' set but not used [-Wunused-but-set-variable]
25 | int st=1,en=sz,ans=0;
| ^~~
longesttrip.cpp: In function 'std::vector<int> longest_trip_1(int)':
longesttrip.cpp:90:18: warning: comparison of integer expressions of different signedness: 'std::vector<int>::size_type' {aka 'long unsigned int'} and 'int' [-Wsign-compare]
90 | if(ans.size()==N)return ans;
| ~~~~~~~~~~^~~
longesttrip.cpp:103:27: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
103 | for(int i=x.second+1;i<ans.size();i++)rans.push_back(ans[i]);
| ~^~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
1 ms |
344 KB |
Output is correct |
2 |
Correct |
8 ms |
444 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
3 ms |
756 KB |
Output is correct |
2 |
Correct |
1 ms |
344 KB |
Output is correct |
3 |
Correct |
1 ms |
344 KB |
Output is correct |
4 |
Correct |
0 ms |
344 KB |
Output is correct |
5 |
Correct |
0 ms |
344 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
7 ms |
344 KB |
Output is correct |
2 |
Correct |
5 ms |
344 KB |
Output is correct |
3 |
Correct |
4 ms |
344 KB |
Output is correct |
4 |
Correct |
6 ms |
344 KB |
Output is correct |
5 |
Correct |
5 ms |
344 KB |
Output is correct |
6 |
Correct |
5 ms |
344 KB |
Output is correct |
7 |
Correct |
4 ms |
344 KB |
Output is correct |
8 |
Correct |
5 ms |
344 KB |
Output is correct |
9 |
Correct |
5 ms |
344 KB |
Output is correct |
10 |
Correct |
5 ms |
344 KB |
Output is correct |
11 |
Correct |
4 ms |
608 KB |
Output is correct |
12 |
Correct |
5 ms |
600 KB |
Output is correct |
13 |
Correct |
4 ms |
600 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
344 KB |
Output is correct |
2 |
Correct |
12 ms |
344 KB |
Output is correct |
3 |
Correct |
19 ms |
344 KB |
Output is correct |
4 |
Correct |
32 ms |
344 KB |
Output is correct |
5 |
Correct |
39 ms |
696 KB |
Output is correct |
6 |
Incorrect |
0 ms |
344 KB |
Incorrect |
7 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
6 ms |
344 KB |
Output is correct |
2 |
Correct |
8 ms |
344 KB |
Output is correct |
3 |
Correct |
19 ms |
344 KB |
Output is correct |
4 |
Partially correct |
25 ms |
344 KB |
Output is partially correct |
5 |
Partially correct |
43 ms |
436 KB |
Output is partially correct |
6 |
Incorrect |
0 ms |
344 KB |
Incorrect |
7 |
Halted |
0 ms |
0 KB |
- |