CF1146H Satanic Panic
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的更多相关文章
- ZJOI2019Round#2
		乱听课记录 关于树的分治问题&杂题选讲 张哲宇 边分治 (边分不是很鸡肋吗) 例题一 题目大意:给出两颗有正负边权的树,求出两个点\(u,v\)使得两棵树中\((u,v)\)距离的和最大. ... 
- 【CF1146】Forethought Future Cup - Elimination Round
		Forethought Future Cup - Elimination Round 窝也不知道这是个啥比赛QwQ A. Love "A" 给你一个串,你可以删去若干个元素,使得最 ... 
- 一段良好的程序永远不应该发生panic异常
		panic来自被调函数的信号,表示发生了某个已知的bug.一段良好的程序永远不应该发生panic异常 对于大部分程序而言,永远无法保证能够成功运行,因为错误原因往往超出程序员的控制范围.任何进行io操 ... 
- Go语言异常处理defer\panic\recover
		Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱.因为开发者很容易滥用异常, ... 
- 【Go入门教程3】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)
		这小节我们要介绍Go里面的流程控制以及函数操作. 流程控制 流程控制在编程语言中是最伟大的发明了,因为有了它,你可以通过很简单的流程描述来表达很复杂的逻辑.Go中流程控制分三大类:条件判断,循环控制和 ... 
- CentOS系统Kernel panic - not syncing: Attempted to kill init
		结果启动虚拟机出现如下问题: Kernel panic - not syncing: Attempted to kill init 解决方法: 系统启动的时候,按下'e'键进入grub编辑界面 ... 
- 【poj3084】 Panic Room
		http://poj.org/problem?id=3084 (题目链接) 题意 一个房子里面有m个房间,一些房间之间有门相连,而门的开关只在一个房间有,也就是说只有一个房间可以控制该扇门的开关.现在 ... 
- 【GoLang】panic defer recover 深入理解
		唉,只能说C程序员可以接受go的错误设计,相比java来说这个设计真的很差劲! 我认为知乎上说的比较中肯的: 1. The key lesson, however, is that errors ar ... 
- POJ3084 Panic Room(最小割)
		把某点与某几点分开的最小花费,当然想到最小割.具体怎么建图,可以画个简单的情况,然后就清楚了: 0到1不受控制,建立0->1容量为INF的边: 1到0受在0一边的一个控制面板的控制,建立1-&g ... 
随机推荐
- jQuery学习笔记:基础
			本文主要总结jQuery中一些知识点 概念 美元符号$是著名的jQuery符号.jQuery把所有功能全部封装在一个全局变量jQuery中,而$也是一个合法的变量名,它是变量jQuery的别名 $本质 ... 
- 【转】利用virtualenv管理Python环境
			virtualenv virtualenv用于创建独立的Python环境,多个python相互独立,互不影响,它能够:1. 在没有权限的情况下安装新套件2. 不同应用可以使用不同的套件版本3. 套件升 ... 
- 717. 1-bit and 2-bit Characters
			static int wing=[]() { std::ios::sync_with_stdio(false); cin.tie(NULL); ; }(); class Solution { publ ... 
- Verilog中的阻塞与非阻塞
			这篇文档值得阅读 按说阻塞与非阻塞是Verilog中最基本的东西,也是老生常谈.但是最近看到很多程序里用到阻塞语句竟然不是很明白,说到底是从来没有自己仔细分析过.当然一般情况程序中也是推荐用非阻塞的. ... 
- 2.2.1synchronized方法的弊端
			缺陷:用关键字synchronized声明方法是有弊端的,譬如A线程调用同步方法执行一个长时间的任务,那么B线程则必须等待较长的时间, 解决方法:使用synchronized同步语句块 package ... 
- Ubuntu下安装pycharm并设置快捷方式
			作者:tongqingliu 转载请注明出处:http://www.cnblogs.com/liutongqing/p/7070327.html Ubuntu下安装pycharm并设置快捷方式 下载P ... 
- (记忆化搜索) FatMouse and Cheese(hdu 1078)
			题目大意: 给n*n地图,老鼠初始位置在(0,0),它每次行走要么横着走要么竖着走,每次最多可以走出k个单位长度,且落脚点的权值必须比上一个落脚点的权值大,求最终可以获得的最大权值 (题目很容 ... 
- 如何更改linux文件的拥有者及用户组(chown和chgrp)
			http://blog.csdn.net/hudashi/article/details/7797393 一.基本知识 在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户.该文件用 ... 
- java中的中文字符转码技术
			package com.yin.test; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; impor ... 
- PAT甲级 1127. ZigZagging on a Tree (30)
			1127. ZigZagging on a Tree (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue ... 
