HDOJ 5365 Run 【正多边形】
2015-08-09 12:14
267 查看
HDOJ 5365 Run 【正多边形】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5365地球人都知道整点是不能构成正五边形和正三边形和正六边形的,
所以只需暴力枚举四个点判断是否是正四边形即可。
假如你不是地球人,那么即使暴力枚举正三边形和稍微不那么暴力地找正五边形和正六边形也是可以通过的(反正找不到)。
正多边形的判断:四条边相等,两条对角线相等
或者对角线向量大小相等且垂直
使用的求边长函数直接过的
#include<iostream> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; #define clr(c) memset(c, 0, sizeof(c)); #define debug(x) cout<<"debug "<<x<<endl; #define pi acos(-1.0) const int INF = 0x3f3f3f3f; typedef long long ll; const int MAXL = 25; int n; typedef struct point{ int x, y; bool operator < (const point& p) const{ if(x == p.x) return y < p.y; else return x < p.x; } bool operator > (const point& p) const{ return p < *this; } }p; p p1, p2, p3, p4; p point[MAXL]; double l1, l2, l3, l4, l5, l6; int cnt; inline double length(p p1, p p2){ return (p1.x-p2.x)*(p1.x-p2.x) + (p1.y-p2.y)*(p1.y-p2.y); } void Resolve(){ cnt = 0; sort(point, point+n); for(int i = 0; i < n-3; i++) for(int j = i+1; j < n-2; j++) for(int k = j+1; k < n-1; k++) for(int l = k+1; l < n; l++){ p1 = point[i]; p2 = point[j]; p3 = point[k]; p4 = point[l]; l1 = length(p1, p2); l2 = length(p1, p3); l3 = length(p2, p4); l4 = length(p3, p4); l5 = length(p1, p4); l6 = length(p2, p3); if(l1 == l2 && l2 == l3 && l3 == l4 && l5 == l6) cnt++; } printf("%d\n", cnt); } int main(){ while(~scanf("%d", &n)){ for(int i = 0; i < n; i++){ scanf("%d%d", &point[i].x, &point[i].y); } Resolve(); } return 0; }
相关文章推荐
- HDOJ 5365 Run 【几何】
- 算法复杂度
- 数据结构—二分查找
- quick cocos2d-x重写消灭星星
- 修复jqgrid setgridparam postdata 的多次查询条件累加
- 聊天
- 线程的互斥与同步
- 开会去互联网会务O2O服务平台
- RecyclerView之动画效果
- Longest Common Prefix
- Longest Common Prefix
- Fiddler 域名过滤
- scala函数基本操作
- C++ Primer Plus第六版 第十章 编程练习答案
- zoj 3195 Design the city 【LCA转RMQ】 【求三点最短距离】
- spring中的BeanFactory与ApplicationContext的作用和区别?
- [Machine Learning (Andrew NG courses)]IV.Linear Regression with Multiple Variables
- POJ_1321_棋盘问题
- Spring IoC
- jQuery 操作Cookie