codeforces 1478 F. Nezzar and Nice Beatmap
阿新 • • 發佈:2021-02-05
技術標籤:CF
題意: 二維平面上有n個點,求一種連線方式使每個點的拐角都為銳角
div2F題頭銜勸退,但其實還好,
一個三角形裡面最多隻有一個角不是銳角,所以可以採用類似氣泡排序的方式對他進行調整
剛開始用兩邊平方和進行比較然後爆longlong了
後來改的向量
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5010;
#define x first
#define y second
pair<ll, ll> mp[N];
vector< ll> ans;
pair<ll, ll> operator-(pair<ll, ll> a, pair<ll, ll>b) {
return pair<ll, ll>(a.x - b.x, a.y - b.y);
}
ll Dot(pair<ll, ll> a,pair<ll, ll> b){
return 1ll*a.x*b.x+1ll*a.y*b.y;
}
int main() {
int n;
cin >> n;
for(int i = 1; i <= n; ++ i) {
cin >> mp[i].x >> mp[i].y;
}
for(int i = 1; i <= n; ++ i) {
ans.push_back(i);
for(int j = i - 1; j > 1;-- j) {
if(Dot(mp[ans[j]] - mp[ans[j - 1]], mp[ans[j - 2]] - mp[ans[j - 1]]) <= 0) {
swap(ans[j], ans[j - 1]);
}
}
}
for(int i = 0; i < n; ++i) {
cout << ans[ i] << " ";
}
return 0;
}