题目
平面上有 n 个点,每个点不是黑的就是白的,现在要放一个隔板,把它们分成两部分,使得一侧的白点数加上另一侧的黑点数最多。
uva1606
代码
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int maxn = 1000 + 50;
struct Point {
int x, y;
double rad;
bool operator < (const Point &rhs) const {
return rad < rhs.rad;
}
}op[maxn], p[maxn];
// op:原始点,p:以基点为起点的向量,rad为其与x轴夹角
int n, color[maxn];
//求向量叉积,OA是否在OB的顺时针方向,即OA->OB是否是一个左转
bool left(Point A, Point B) {
return A.x * B.y - A.y * B.x >= 0;
}
int solve() {
if (n <= 2) return 2; //注意对特殊数据的特判,防止被hack
int ans = 0;
for (