现场得分:过了
#include<bits/stdc++.h>
#define LL long long
#define MAXN 5010
using namespace std;
template<typename T> void Read(T &cn)
{
char c; int sig = 1;
while(!isdigit(c = getchar())) if(c == ‘-‘) sig = 0;
if(sig) {cn = c-48; while(isdigit(c = getchar())) cn = cn*10+c-48; }
else {cn = 48-c; while(isdigit(c = getchar())) cn = cn*10+48-c; }
}
template<typename T> void Write(T cn)
{
int wei = 0; T cm = 0; int cx = cn%10; cn/=10;
if(cn < 0 || cx < 0) {putchar(‘-‘); cn = 0-cn; cx = 0-cx; }
while(cn)cm = cm*10+cn%10,cn/=10,wei++;
while(wei--)putchar(cm%10+48),cm/=10;
putchar(cx+48);
}
template<typename T> void WriteL(T cn) {Write(cn); puts(""); }
template<typename T> void WriteS(T cn) {Write(cn); putchar(‘ ‘); }
template<typename T> void Max(T &cn, T cm) {cn = cn < cm ? cm : cn; }
template<typename T> void Min(T &cn, T cm) {cn = cn < cm ? cn : cm; }
struct qwe{
LL x,y;
void getit() {Read(x); Read(y); }
inline friend qwe operator -(qwe cn, qwe cm) {qwe guo; guo.x = cn.x-cm.x; guo.y = cn.y-cm.y; return guo; }
};
LL dianji(qwe cn, qwe cm) {return cn.x*cm.x + cn.y*cm.y; }
qwe a[MAXN+1];
int n;
int xu[MAXN+1];
int main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
Read(n);
for(int i = 1;i<=n;i++) a[i].getit(), xu[i] = i;
int cnt = 0;
for(int i = 3;i<=n;)
{
cnt++;
if(dianji(a[xu[i]]-a[xu[i-1]], a[xu[i-2]]-a[xu[i-1]]) <= 0) {
swap(xu[i-2], xu[i-1]);
i--; Max(i,3);
}
else i++;
if(cnt >= 100000000) {puts("-1"); return 0; }
// printf("i = %d cnt = %d %lld\n",i,cnt);
// for(int j = 1;j<=n;j++) printf("xu[%d] = %d ",j,xu[j]); puts("");
}
for(int i = 1;i<=n;i++) WriteS(xu[i]); puts("");
return 0;
}
【CF】Codeforces Round 698(Div1)_1477C_几何/构造
原文:https://www.cnblogs.com/czyarl/p/14347295.html