2016级算法第三次上机-E.ModricWang's Polygons
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的更多相关文章
- 2016级算法第三次上机-F.ModricWang的导弹防御系统
936 ModricWang的导弹防御系统 思路 题意即为:给出一个长度为n的序列,求出其最长不降子序列. 考虑比较平凡的DP做法: 令\(nums[i]\) 表示这个序列,\(f[x]\) 表示以第 ...
- 2016级算法第三次上机-G.Winter is coming
904 Winter is coming 思路 难题.首先简化问题, \(n\) 个0与 \(m\) 个1排成一列,连续的0不能超过x个,连续的1不能超过y个,求排列方法数. 显然会想到这是动态规划. ...
- 2016级算法第三次上机-C.AlvinZH的奇幻猜想——三次方
905 AlvinZH的奇幻猜想--三次方 思路 中等题.题意简单,题目说得简单,把一个数分成多个立方数的和,问最小立方数个数. 脑子转得快的马上想到贪心,从最近的三次方数往下减,反正有1^3在最后撑 ...
- 2016级算法第三次上机-B.Bamboo和巧克力工厂
B Bamboo和巧克力工厂 分析 三条流水线的问题,依然是动态规划,但是涉及的切换种类比较多.比较易于拓展到n条流水线的方式是三层循环,外层是第k个机器手,里面两层代表可切换的流水线 核心dp语句: ...
- 2016级算法第三次上机-D.双十一的抉择
915 双十一的抉择 思路 中等题.简化题目:一共n个数,分成两组,使得两组的差最接近0,就是说要使两组数都尽可能的接近sum/2. 思路还是很混乱的,不知道如何下手,暴力也挺难的,还不能保证对.想一 ...
- 2016级算法第三次上机-A.Bamboo的小吃街
A Bamboo的小吃街 分析 经典的两条流水线问题,题目描述基本类似于课件中的流水线调度,符合动态规划最优子结构性质 关键的动态规划式子为: dp[0][j] = min(dp[0][j - 1], ...
- 2016级算法第五次上机-G.ModricWang的撒币游戏
1062 ModricWang的撒币游戏 思路 此题为2017年ACM-ICPC亚洲区域赛乌鲁木齐赛区的A题,现场94个队中有38个队做出此题.在这里作为满分以外的题,是为了让大家看一下外面一些题的风 ...
- 2016级算法第五次上机-F.ModricWang的水系法术
1066 ModricWang的水系法术 思路 比较典型的最大流问题,需要注意的是,题目已经暗示(明示)了这里的边是双向的,在建图的时候需要加上反向边的容量值. 解决最大流问题的基本思路就是不断在残量 ...
- 2016级算法第四次上机-B ModricWang的序列问题
1019 ModricWang的序列问题 思路 此题题意非常清晰,给定一个序列,求出最长上升子序列的长度.从数据规模来看,需要\(O(nlogn)\) 的算法. \(O(nlongn)\) 求最长上升 ...
随机推荐
- python实现高效率的排列组合算法-乾颐堂
组合算法 本程序的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标 代表的数被选中,为0则没选中. 首先初始化,将数组前n个元素置1,表示第一个组合为前n个数. 然后从左到右扫描数组 ...
- java IO类简单介绍
一.流的概念 流是字节序列的抽象概念.流和文件的差别:文件是数据的静态存储形式,而流是指数据传输时的形态.文件只是流的操作对象之一.流按其操作的对象不同可以分为文件流.网络流.内存流.磁带流等.Jav ...
- kafka安装配置及操作(官方文档)http://kafka.apache.org/documentation/(有单节点多代理配置)
https://www.cnblogs.com/biehongli/p/7767710.html w3school https://www.w3cschool.cn/apache_kafka/apac ...
- BZOJ 2038 小z的袜子(莫队)
Description 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命……具体来说,小Z把这N只袜 ...
- Centos配置多个tomcat服务器,并用nginx实现负载均衡
centos配置tomcat请参见上一篇博文 :http://www.cnblogs.com/nanyangzp/p/4897655.html 一:多tomcat利用不同端口开启服务器 多个tomca ...
- [LeetCode 题解]: Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters. For example, ...
- vue的props 属性类似于bug的东西
/* * @Author: shs * @Date: 2019-04-19 17:48:39 * @Last Modified by: shs * @Last Modified time: 2019- ...
- Consul .netcore
0)基本概念 consul常用于服务发现 [微服务] web_Api \ \ ->注册服务 raft选举le ...
- ExtJS浏览器对象模型BOM——命名空间和用户代理对象、Cookie
BOM(浏览器对象模型(BrowserObjectModel)),允许访问和操控浏览器窗口.研发者通过使用BOM,可移动窗口.更改状态栏文本.执行其它不与页面内容发生直接联系的操作. 本文将从ExtJ ...
- Dubbo与Hadoop RPC的区别
本文来自网易云社区 RPC(Remote Procedure Call,远程过程调用)是一个计算机通信协议.该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编 ...