2019徐州网络赛K Center(暴力枚举)
发布日期:2021-05-04 18:26:46 浏览次数:24 分类:技术文章

本文共 1871 字,大约阅读时间需要 6 分钟。

You are given a point set with nnn points on the 2D-plane, your task is to find the smallest number of points you need to add to the point set, so that all the points in the set are center symmetric.

All the points are center symmetric means that you can find a center point (Xc,Yc)(X_c,Y_c)(Xc​,Yc​)(not necessarily in the point set), so that for every point (Xi,Yi)(X_i,Y_i)(Xi​,Yi​) in the set, there exists a point (Xj,Yj)(X_j,Y_j)(Xj​,Yj​) (iii can be equal to jjj) in the set satisfying Xc=(Xi+Xj)/2X_c=(X_i+X_j)/2Xc​=(Xi​+Xj​)/2 and Yc=(Yi+Yj)/2Y_c=(Y_i+Y_j)/2Yc​=(Yi​+Yj​)/2.

Input

The first line contains an integer n(1≤n≤1000)n(1 \le n \le 1000)n(1≤n≤1000).

The next nnn lines contain nnn pair of integers (Xi,Yi)(X_i,Y_i)(Xi​,Yi​) (−106≤Xi,Yi≤106)(-10^6 \le X_i,Y_i \le 10^6)(−106≤Xi​,Yi​≤106) -- the points in the set

Output

Output a single integer -- the minimal number of points you need to add.

样例输入复制

32 0-3 10 -2

样例输出复制

1

样例解释

For sample 111, add point (5,−3)(5,-3)(5,−3) into the set, the center point can be (1,−1)(1,-1)(1,−1) .

暴力枚举每个中点,记录每个中点出现次数,取最大值,答案即为n-maxx   因为有n-maxx个点不是以该点为中心,需要添加的点就是这些点关于中心点的对称点

#include 
using namespace std;const int N=1e3+30;struct point{ int x,y;}p[N];bool cmp(point a,point b){ if(a.x!=b.x) return a.x
,int>mp;int main(){ int n; while(~scanf("%d",&n)) { mp.clear(); for(int i=1;i<=n;i++) { scanf("%d%d",&p[i].x,&p[i].y); }// sort(p+1,p+n+1,cmp); int maxx=0; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { double xx=1.0*(p[i].x+p[j].x)/2; double yy=1.0*(p[i].y+p[j].y)/2; pair
p1; p1=make_pair(xx,yy); mp[p1]++; maxx=max(maxx,mp[p1]); } } cout<
<<'\n'; } return 0;}

 

上一篇:杜教BM板子
下一篇:2019徐州网络赛K XKC's basketball team(结构体排序+二分+RMQ)

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2025年04月07日 07时27分07秒