POJ 3135 Polygons on the Grid(枚举+凸包)
题目大意是让你用这n条边放在网格上构成凸包,并且边的两端点必须在网格上。
那么比较容易想到的就是枚举可能情况,因为这样的勾股数组成情况不多,因此可以直接枚举所有连出去的边反映在坐标轴上的所有情况,最后判断是否回到起点并且绕城一个凸包。
但是样例三每条边有最多36个方向,那么366*6!显然会超时,我们就需要一些剪枝。
1.第一条边固定住,那么我们的枚举边的顺序的复杂度变成了5!.
2.枚举到最后一个点的时候,不需要再将次边连出去判断是否回到起点,直接判断起点到该点的距离是否为这条边的长度即可,复杂度降成365.
3.每次往下搜索的时候都要去判断是否把这个点定住,当前的所有点仍然是一个凸包,因为满足的条件的凸包不多,所以这部分剪枝剪得比较多.
附赠数据:
6
60 203 113 164 169 131
6
185 198 159 109 69 120
6
246 261 281 217 240 225
6
290 124 130 16 112 120
0
41636
37323
125526
32088
- // ——By DD_BOND
- //#include<bits/stdc++.h>
- //#include<unordered_map>
- //#include<unordered_set>
- #include<functional>
- #include<algorithm>
- #include<iostream>
- //#include<ext/rope>
- #include<iomanip>
- #include<climits>
- #include<cstring>
- #include<cstdlib>
- #include<cstddef>
- #include<cstdio>
- #include<memory>
- #include<vector>
- #include<cctype>
- #include<string>
- #include<cmath>
- #include<queue>
- #include<deque>
- #include<ctime>
- #include<stack>
- #include<map>
- #include<set>
- #define fi first
- #define se second
- #define MP make_pair
- #define pb push_back
- #define INF 0x3f3f3f3f
- #define pi 3.1415926535898
- #define lowbit(a) (a&(-a))
- #define lson l,(l+r)/2,rt<<1
- #define rson (l+r)/2+1,r,rt<<1|1
- #define Min(a,b,c) min(a,min(b,c))
- #define Max(a,b,c) max(a,max(b,c))
- #define debug(x) cerr<<#x<<"="<<x<<"\n";
- //#pragma GCC optimize(3)
- //#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
- using namespace std;
- typedef long long ll;
- typedef pair<int,int> P;
- typedef pair<ll,ll> Pll;
- typedef unsigned long long ull;
- const int seed=;
- const ll LLMAX=2e18;
- const int MOD=1e9+;
- const double eps=1e-;
- const int MAXN=1e6+;
- const int hmod1=0x48E2DCE7;
- const int hmod2=0x60000005;
- inline ll sqr(ll x){ return x*x; }
- inline int sqr(int x){ return x*x; }
- inline double sqr(double x){ return x*x; }
- ll __gcd(ll a,ll b){ return b==? a: __gcd(b,a%b); }
- ll qpow(ll a,ll n){ll sum=;while(n){if(n&)sum=sum*a%MOD;a=a*a%MOD;n>>=;}return sum;}
- inline int dcmp(double x){ if(fabs(x)<eps) return ; return (x>? : -); }
- struct Point{
- int x,y;
- Point(){ x=y=; }
- Point(int _x,int _y):x(_x),y(_y){}
- inline Point operator -(const Point &n)const{
- return Point(x-n.x,y-n.y);
- }
- inline int operator *(const Point &n)const{
- return x*n.x+y*n.y;
- }
- inline int operator ^(const Point &n)const{
- return x*n.y-y*n.x;
- }
- };
- Point loc[];
- int n,sum,ans,l[];
- vector<Point>vec[];
- inline void dfs(int p,int x,int y,int res,int area){
- if(p==n-){
- if(sqr(l[p])!=x*x+y*y) return ;
- ans=max(ans,area/);
- }
- else{
- for(int i=;i<(int)vec[l[p]].size();i++){
- if(p==&&(vec[l[p]][i].x<||vec[l[p]][i].y<||vec[l[p]][i].x<vec[l[p]][i].y)) continue;
- Point tmp(x+vec[l[p]][i].x,y+vec[l[p]][i].y);
- if(p==||(p>=&&
- ( ((loc[p]-loc[p-])^(tmp-loc[p]))>||( ((loc[p]-loc[p-])^(tmp-loc[p]))==&&((loc[p]-loc[p-])*(tmp-loc[p]))> ) )&&
- ( ((tmp-loc[p])^(Point(,)-tmp))>||( ((tmp-loc[p])^(Point(,)-tmp))==&&((tmp-loc[p])*(Point(,)-tmp))> ) )&&
- ( ((Point(,)-tmp)^loc[])>||( ((Point(,)-tmp)^loc[])==&&((Point(,)-tmp)*loc[])> ) )&&
- tmp.x*tmp.x+tmp.y*tmp.y<=sqr(sum-res-l[p]) ) ){
- int now=area;
- loc[p+]=tmp;
- if(p>=) now+=loc[p]^loc[p+];
- dfs(p+,tmp.x,tmp.y,res+l[p],now);
- }
- }
- }
- }
- int main(void)
- {
- loc[]=Point(,);
- for(int i=-;i<=;i++)
- for(int j=-;j<=;j++){
- int p=i*i+j*j;
- int sq=round(sqrt(p));
- if(sq>||sq*sq!=p) continue;
- vec[sq].pb(Point(i,j));
- }
- while(scanf("%d",&n)&&n){
- sum=; ans=-;
- for(int i=;i<n;i++) scanf("%d",&l[i]),sum+=l[i];
- sort(l,l+n);
- do{ dfs(,,,,); }while(next_permutation(l+,l+n));
- if(ans==) ans=-;
- printf("%d\n",ans);
- }
- return ;
- }
POJ 3135 Polygons on the Grid(枚举+凸包)的更多相关文章
- POJ 1873 The Fortified Forest(枚举+凸包)
Description Once upon a time, in a faraway land, there lived a king. This king owned a small collect ...
- POJ.3279 Fliptile (搜索+二进制枚举+开关问题)
POJ.3279 Fliptile (搜索+二进制枚举+开关问题) 题意分析 题意大概就是给出一个map,由01组成,每次可以选取按其中某一个位置,按此位置之后,此位置及其直接相连(上下左右)的位置( ...
- POJ 1873 UVA 811 The Fortified Forest (凸包 + 状态压缩枚举)
题目链接:UVA 811 Description Once upon a time, in a faraway land, there lived a king. This king owned a ...
- poj 1113:Wall(计算几何,求凸包周长)
Wall Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 28462 Accepted: 9498 Description ...
- 【POJ】1228 Grandpa's Estate(凸包)
http://poj.org/problem?id=1228 随便看看就能发现,凸包上的每条边必须满足,有相邻的边和它斜率相同(即共线或凸包上每个点必须一定在三点共线上) 然后愉快敲完凸包+斜率判定, ...
- Poj(3522),UVa(1395),枚举生成树
题目链接:http://poj.org/problem?id=3522 Slim Span Time Limit: 5000MS Memory Limit: 65536K Total Submis ...
- Codeforces Round #249 (Div. 2) D. Special Grid 枚举
题目链接: http://codeforces.com/contest/435/problem/D D. Special Grid time limit per test:4 secondsmemor ...
- poj 3740 Easy Finding 二进制压缩枚举dfs 与 DLX模板详细解析
题目链接:http://poj.org/problem?id=3740 题意: 是否从0,1矩阵中选出若干行,使得新的矩阵每一列有且仅有一个1? 原矩阵N*M $ 1<= N <= 16 ...
- POJ 1753 Flip Game(二进制枚举)
题目地址链接:http://poj.org/problem?id=1753 题目大意: 有4*4的正方形,每个格子要么是黑色,要么是白色,当把一个格子的颜色改变(黑->白或者白->黑)时, ...
随机推荐
- python 面向对象_2
self的理解 通俗理解self就是实例对象,实例化的是什么,self就是什么 实例变量: 经过实例化才能使用的变量 class Person(): def __init__(self,id,name ...
- node.js入门学习(六)--express
1.官网:http://expressjs.com/ 中文:http://www.expressjs.com.cn/ 2.HelloWorld 1)mkdir node-express-demo 2) ...
- Redis实战(十五)Redis实现接口调用频率限制
序言 登录次数 资料
- C++ - 操作运算符
一.操作运算符 操作运算符:在C++中,编译器有能力将数据.对象和操作符共同组成表达式,解释为对全局或成员函数的调用 该全局或成员函数被称为操作符函数,程序员可以通过重定义函数操作符函数,来达到自己想 ...
- POJ 1912 凸包
题目: #include <iostream> #include <cstdio> #include <cstring> #include <cstdlib& ...
- windows 安装 Mongodb 数据库及操作图形化软件 Robo 3T
1 下载系统对应的正确 Mongodb 和 Robo 3T 版本 2 选中 Mongodb 需要安装的路径(后续会使用路径) 3 启动 Mongodb 服务器(到安装相关的路径) 可以参考 菜鸟教程 ...
- 手动创建Maven项目并建立两个项目之间的依赖关系
用命令行快速建立maven项目 -> mvn:archetype:generate -> 直接回车或者自己输入你想生成的 -> groupId ->artifactId -&g ...
- 利用IKVM在C#中调Java程序(总结+案例)
IKVM.NET是一个针对Mono和微软.net框架的java实现,其设计目的是在.NET平台上运行java程序.本文将比较详细的介绍这个工具的原理.使用入门(如何java应用转换为.NET应用.), ...
- Json C#解析
介绍 项目中数据格式如果是是Json格式,推荐大家使用LitJson和Newtonsoft.json进行解析 库的详细介绍和下载地址 推荐使用VS自带的Nuget来使用 Newtonsoft.Json ...
- event.currentTarget
https://api.jquery.com/event.currentTarget/ event.currentTargetReturns: Element Description: The cur ...