提交时间:2024-04-28 08:37:42

运行 ID: 28607

#include<bits/stdc++.h> using namespace std; #define int long long const int MAXN=100010; int n; struct student{ int a,b,id; bool operator <(const student&G)const{ return a-b==G.a-G.b?a<b:a-b<G.a-G.b; } }s[MAXN]; inline int f(int i,int j,int k) {return s[i].a * s[j].b + s[j].a * s[k].b + s[k].a * s[i].b;} inline bool chk(int i,int j,int k) {return f(i,j,k) >= f(k,j,i);} int p[MAXN],us[MAXN],fl; void dfs(int now){ if(now==n+1){ for(int i=1;i<=n;i++)printf("%lld ",p[i]);fl=1; return; } // for(int i=1;i<=n;i++)printf("%lld ",p[i]); for(int i=1;i<=n;i++){ if(!us[i]){ if(now<=2||chk(p[now-2],p[now-1],i)){ p[now]=i;us[i]=1; dfs(now+1);if(fl)return; p[now]=0;us[i]=0; } } } } void slv(){ scanf("%lld",&n); for(int i=1;i<=n;i++){ scanf("%lld%lld",&s[i].a,&s[i].b); s[i].id=i; } dfs(1); if(!fl)printf("-1"); } signed main(){ slv(); return 0; }