930 ModricWang's Polygons

思路

首先要想明白,哪些多边形可能是格点正多边形?

分情况考虑:

三角形不可能,因为边长为有理数的正三角形的面积为无理数,而格点三角形的面积为有理数,二者矛盾。

正四边形毫无疑问是可以的。

边数>4时,可以考虑无穷递降法:

以六边形为例,假如整点正六边形存在,一定有边长最小的一个,记作\(A_1 A_2 A_3 A_4 A_5 A_6\)。以\(A_2\)为中心,将\(A_1\)逆时针旋转90度,得到\(B_1\)。显然也是整点。类似定义\(B_2 ... B_6\),它们也都是整点。【注:上面用到如下结论:一个整点绕另一个整点旋转90度,得到的点仍然是整点。证明很容易。】如你所见,\(B_1 B_2 B_3 B_4 B_5 B_6\)是一个更小的整点正六边形,矛盾。

对于边数>4的其他情况,也可以用类似方法证明。

参考自这里

于是该问题就变成了统计格点正四边形的数量。考虑枚举任意两个点形成的线段,那么由这一条线段可以形成的格点正四边形只有两个,并且另外两个点的坐标是可以直接算出来的。因此只要枚举任意两点的组合,验证以这两个点为相邻两点的格点正四边形是否存在即可。

时间复杂度\(O(n^2)\),空间复杂度\(O(n)\)

代码

#include <bits/stdc++.h>
#define ll long long
#define mk make_pair
#define y1 yyy
using namespace std; const int N = 1e3 + 5; map<pair<int, int>, bool> M;
int x[N], y[N], n, ans; int main() {
int T;
while (scanf("%d", &n) != EOF) {
ans = 0;
M.clear();
for (int i = 1; i <= n; i++) {
scanf("%d %d", x + i, y + i);
M[mk(x[i], y[i])] = 1;
}
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
int dx = y[j] - y[i];
int dy = x[i] - x[j];
int ok = 0;
if (M.count(mk(x[i] + dx, y[i] + dy)))
ok++;
if (M.count(mk(x[j] + dx, y[j] + dy)))
ok++;
if (ok == 2)
ans++;
ok = 0;
if (M.count(mk(x[i] - dx, y[i] - dy)))
ok++;
if (M.count(mk(x[j] - dx, y[j] - dy)))
ok++;
if (ok == 2)
ans++;
}
}
printf("%d\n", ans / 4);
}

2016级算法第三次上机-E.ModricWang's Polygons的更多相关文章

  1. 2016级算法第三次上机-F.ModricWang的导弹防御系统

    936 ModricWang的导弹防御系统 思路 题意即为:给出一个长度为n的序列,求出其最长不降子序列. 考虑比较平凡的DP做法: 令\(nums[i]\) 表示这个序列,\(f[x]\) 表示以第 ...

  2. 2016级算法第三次上机-G.Winter is coming

    904 Winter is coming 思路 难题.首先简化问题, \(n\) 个0与 \(m\) 个1排成一列,连续的0不能超过x个,连续的1不能超过y个,求排列方法数. 显然会想到这是动态规划. ...

  3. 2016级算法第三次上机-C.AlvinZH的奇幻猜想——三次方

    905 AlvinZH的奇幻猜想--三次方 思路 中等题.题意简单,题目说得简单,把一个数分成多个立方数的和,问最小立方数个数. 脑子转得快的马上想到贪心,从最近的三次方数往下减,反正有1^3在最后撑 ...

  4. 2016级算法第三次上机-B.Bamboo和巧克力工厂

    B Bamboo和巧克力工厂 分析 三条流水线的问题,依然是动态规划,但是涉及的切换种类比较多.比较易于拓展到n条流水线的方式是三层循环,外层是第k个机器手,里面两层代表可切换的流水线 核心dp语句: ...

  5. 2016级算法第三次上机-D.双十一的抉择

    915 双十一的抉择 思路 中等题.简化题目:一共n个数,分成两组,使得两组的差最接近0,就是说要使两组数都尽可能的接近sum/2. 思路还是很混乱的,不知道如何下手,暴力也挺难的,还不能保证对.想一 ...

  6. 2016级算法第三次上机-A.Bamboo的小吃街

    A Bamboo的小吃街 分析 经典的两条流水线问题,题目描述基本类似于课件中的流水线调度,符合动态规划最优子结构性质 关键的动态规划式子为: dp[0][j] = min(dp[0][j - 1], ...

  7. 2016级算法第五次上机-G.ModricWang的撒币游戏

    1062 ModricWang的撒币游戏 思路 此题为2017年ACM-ICPC亚洲区域赛乌鲁木齐赛区的A题,现场94个队中有38个队做出此题.在这里作为满分以外的题,是为了让大家看一下外面一些题的风 ...

  8. 2016级算法第五次上机-F.ModricWang的水系法术

    1066 ModricWang的水系法术 思路 比较典型的最大流问题,需要注意的是,题目已经暗示(明示)了这里的边是双向的,在建图的时候需要加上反向边的容量值. 解决最大流问题的基本思路就是不断在残量 ...

  9. 2016级算法第四次上机-B ModricWang的序列问题

    1019 ModricWang的序列问题 思路 此题题意非常清晰,给定一个序列,求出最长上升子序列的长度.从数据规模来看,需要\(O(nlogn)\) 的算法. \(O(nlongn)\) 求最长上升 ...

随机推荐

  1. http和socket之长连接和短连接区别(转)

    TCP/IP TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层. 在网络层有IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议. 在传输层中有TCP协议与UDP协议. 在应 ...

  2. jQuery autocomplete -默认

    <!doctype html> <html> <head> <meta name="content-type" content=" ...

  3. 富文本编辑器和fastdfs的使用

    宜立方商城的系统架构a) 功能介绍(项目架构,有哪些功能模块,这些功能模块如何实现?)b) 架构讲解工程搭建-后台工程c) 使用maven搭建工程(后台工程如何搭建?)d) 使用maven的tomca ...

  4. idea升级maven工程jar包版本和解决jar包冲突

    原来用过eclipse的都知道,想要升级maven工程的jar包版本或者解决jar包冲突,直接在pom文件下的dependency hierarchy视图下右击冲突的jar包,将其exclude掉,然 ...

  5. jquery删除记录弹出提示框

    来自于<jquery权威指南> ------------------- 点击删除时,弹出提示框,并做相应的删除确定或取消 完整代码如下: <!DOCTYPE html PUBLIC ...

  6. Photo4

    Story: 我手捧玫瑰,一个人,走在桥上.桥下是波澜壮阔的大海,一不小心,我就有失足的危险.海鸟的低鸣在我耳际盘旋着,浪汹涌,仿佛要把我吞噬掉.你也许奇怪,为何我一人手捧玫瑰走在桥上.只因,女骑从来 ...

  7. React相关知识和经验的碎片化记录

    React相关知识和经验的碎片化记录 1.Warning: validateDOMNesting(...): Whitespace text nodes cannot appear as a chil ...

  8. Windows下如何安装MongoDB

    下载地址: http://www.mongodb.org/downloads 我下载的是:mongodb-win32-x86_64-2008plus-2.6.6 解压到:D:\soft 同时在该目录下 ...

  9. Linux查询系统信息命令

    Linux查看系统信息是比较基础的知识,所以这个应该都需要掌握,命令和解释如下: #uname -a           查看操作系统.内核.CPU信息 #head -n 1 /etc/issue   ...

  10. 编写高质量代码改善C#程序的157个建议——建议146:只对外公布必要的操作

    建议146:只对外公布必要的操作 那些没有必要公开的方法和属性要声明成private.如果需要公开的方法和属性超过9个,在VS默认的设置下,就需要滚屏才能显示在Intellisense中,如图: Sa ...