题目传送门

Description

给定二维平面内\(n\)个点\((n\leq 300)\),求能组成五角星(不要求正五角星)的五元组个数。

Solution

一道小清新的寄蒜几盒计算几何题,代码不到50行。

一个五元组能组成五角星当且仅当五个点都在凸包上,即存在五条连续的连边,使得极角序递增。

先将边按极角序排序,然后\(dp\)转移。

对于每一条边\(u->v\),\(dp_{u, v,1}=1\),转移是\(dp_{S, v, i+1}+=dp_{S,u,i}\),因为极角序递增,所以所有状态都可以转移。

最后的\(Ans=\sum_{i=1}^{n}dp_{i,i,5}\)。

时间复杂度\(O(n^3)\)

话说snuke睡过头了40min,然后在59min拿了这题的首杀。

Code

#include<bits/stdc++.h>
#define int long long
#define rep(i, a, b) for (register int i=(a); i<=(b); ++i)
using namespace std;
struct Vector{int x,y;Vector(int a=0,int b=0):x(a),y(b){}};
Vector operator - (Vector a, Vector b){return Vector(a.x-b.x, a.y-b.y);}
int Cross(Vector A, Vector B) {return A.x*B.y-A.y*B.x;}
bool operator < (Vector A, Vector B) {return Cross(A, B)<0;} const int N=305;
Vector p[N];
int dp[N][N][6];
vector<pair<Vector, pair<int, int> > > e; inline int read()
{
int x=0,f=1;char ch=getchar();
for (;ch<'0'||ch>'9';ch=getchar()) if (ch=='-') f=-1;
for (;ch>='0'&&ch<='9';ch=getchar()) x=(x<<1)+(x<<3)+ch-'0';
return x*f;
} signed main()
{
int n=read();
rep(i, 1, n) p[i].x=read(), p[i].y=read();
rep(i, 1, n) rep(j, 1, n) if (i^j)
e.push_back(make_pair(Vector(p[j]-p[i]), make_pair(i, j)));
sort(e.begin(), e.end());
for (auto now: e)
{
int u=now.second.first, v=now.second.second;
dp[u][v][1]++;
rep(i, 1, 5) rep(s, 1, n)
dp[s][v][i+1]+=dp[s][u][i];
}
int ans=0;
rep(i, 1, n) ans+=dp[i][i][5];
printf("%lld\n", ans);
return 0;
}

CF1146H Satanic Panic的更多相关文章

  1. ZJOI2019Round#2

    乱听课记录 关于树的分治问题&杂题选讲 张哲宇 边分治 (边分不是很鸡肋吗) 例题一 题目大意:给出两颗有正负边权的树,求出两个点\(u,v​\)使得两棵树中\((u,v)​\)距离的和最大. ...

  2. 【CF1146】Forethought Future Cup - Elimination Round

    Forethought Future Cup - Elimination Round 窝也不知道这是个啥比赛QwQ A. Love "A" 给你一个串,你可以删去若干个元素,使得最 ...

  3. 一段良好的程序永远不应该发生panic异常

    panic来自被调函数的信号,表示发生了某个已知的bug.一段良好的程序永远不应该发生panic异常 对于大部分程序而言,永远无法保证能够成功运行,因为错误原因往往超出程序员的控制范围.任何进行io操 ...

  4. Go语言异常处理defer\panic\recover

    Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ...

  5. 【Go入门教程3】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)

    这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和 ...

  6. CentOS系统Kernel panic - not syncing: Attempted to kill init

    结果启动虚拟机出现如下问题: Kernel panic - not syncing: Attempted to kill init     解决方法: 系统启动的时候,按下'e'键进入grub编辑界面 ...

  7. 【poj3084】 Panic Room

    http://poj.org/problem?id=3084 (题目链接) 题意 一个房子里面有m个房间,一些房间之间有门相连,而门的开关只在一个房间有,也就是说只有一个房间可以控制该扇门的开关.现在 ...

  8. 【GoLang】panic defer recover 深入理解

    唉,只能说C程序员可以接受go的错误设计,相比java来说这个设计真的很差劲! 我认为知乎上说的比较中肯的: 1. The key lesson, however, is that errors ar ...

  9. POJ3084 Panic Room(最小割)

    把某点与某几点分开的最小花费,当然想到最小割.具体怎么建图,可以画个简单的情况,然后就清楚了: 0到1不受控制,建立0->1容量为INF的边: 1到0受在0一边的一个控制面板的控制,建立1-&g ...

随机推荐

  1. java script入门之知识

    1.注释 /*              */ 多行 //单行 2.常见形式 <!DOCTYPE html><html><head><title>My ...

  2. neo4j服务配置

    第一步: 首先下载neo4j的community版本的    https://neo4j.com/download-center/ 第二步-添加环境变量: NEO4J_HOME = [文件路径] Pa ...

  3. 2019.01.14 codeforces685B. Kay and Snowflake(树形dp)

    传送门 题意简述:给出一棵树,求每个子树的重心. 首先通过画图可以观察出一个性质,我们从叶子结点向根节点递推重心的话重心的位置是不会下降的. 然后由于一个点的重心要么是自己,要么在重儿子子树内,因此如 ...

  4. Apache和nginx 域名配置

    apache配置 一.hosts配置: 1.用编辑器打开hosts文件,位置:C:\Windows\System32\drivers\etc目录下 2.在hosts文件里添加自己的域名配置,配置规则如 ...

  5. lambda表达式,变量作用域

    # lambda表达式 def filter_lt(predidcate,lt): result=[] for elem in lt: if predidcate(elem): result.appe ...

  6. Android 从相机或相册或获取图片(转)

    参考: https://github.com/ASDbobo/GetPhotoDemo Android 8.0 调取系统摄像头和相册选择图片 9.3 使用Camera拍照

  7. 百度api接口_知识积累

    app_id, app_key, app_secret app_id 是用来标记你的开发者账号的, 是你的用户id, 这个id 在数据库添加检索, 方便快速查找 app_key 和 app_secre ...

  8. 交换机的Access口与Trunk口

    基本概念 Access类型的端口只能属于1个VLAN,一般用于连接计算机的端口:Trunk类型的端口可以允许多个VLAN通过,可以接收和发送多个VLAN的报文,一般用于交换机之间连接的端口: 处理流程 ...

  9. js setInterval详解

    [自己总结]: 语法  setInterval(code,interval) ①可以有第三个参数,第三个参数作为第一个参数(函数)的参数 ②第一个参数是函数,有三种形式: 1.传函数名,不用加引号,也 ...

  10. ssh 认证

    ssh 秘钥认证流程 ssh配置认证 基于口令(密码)的安全验证 [root@m01 ~]# ssh 10.0.0.41 hostname root@10.0.0.41's password: bac ...