哎,上海站打的很烂,自己不会的还是太多,还有就是英语真的重要,热身赛就是因为翻译错了,然后题意弄错了
热身赛
A.Two Point Removal
题目大意:就是给你若干点的纵坐标,然后横坐标是1-n,然后在若干点中删除2个,然后使得(0,0)到(n+1,0)距离最短;
思路:先删除一个点,保证删除后使得路线最短,再删除下一个
#include <iostream>
#include <algorithm>
#include<cmath>
using namespace std;
const int M=1e6+7;
#define ll long long
int m;
double v[M];
struct node
{
int x;
int y;
}b[M];
double solve(node b1,node b2,node b3)
{
return sqrt(abs(b1.x-b2.x)*abs(b1.x-b2.x)+abs(b1.y-b2.y)*abs(b1.y-b2.y))+sqrt(abs(b3.x-b2.x)*abs(b3.x-b2.x)+abs(b3.y-b2.y)*abs(b3.y-b2.y))-sqrt(abs(b1.x-b3.x)*abs(b1.x-b3.x)+abs(b1.y-b3.y)*abs(b1.y-b3.y));
}
bool cmp(node a,n