[打基础]luogu2181对角线——计数原理
啦啦啦我ysw又回来啦!之后大概会准备打acm,暑假尽量复习复习,因为已经快两年没碰oi了,最多也就高三noip前学弟学妹出题讲题,所以从这一篇blog开始大概会有一系列“打基础”的blog,既是复习也是重新学一遍叭~高中的时候学得就不太扎实
题意:对于一个任何三条对角线不会交于同一点的凸$n$边形,问对角线交点个数,$n\leq 10^5$。

例如$n=6$的情形下答案为15
似乎我们可以随意给一个端点编号为1,按照逆时针/顺时针顺序依次编号$1,2,3……n$,这样一来我们可以先只考虑以点1为其中一个端点出发的所有对角线(图中红线)对应的交点,这个问题似乎好处理了许多,因为如果另一条对角线要和它有交点(蓝线)当且仅当蓝线的两个端点在红线的两侧!(嗯!这不就是计算几何里面判断直线是否有交点的方法嘛!?)
于是我们想,对于编号为$k$的点,1~k内从点2到点$k-1$是可以作为其中一个起点的,一共是$k-1-2+1=k-2$个点,同样的另一侧从$k+1$到$n$可以作为对角线另一点,一共是$n-(k+1)+1=n-k$个点
乘法原理得到$(k-2)(n-k)$,接着只要对所有情形进行求和就行了,对于$k$来说最小取到3(2的话就不是对角线了),最大取到$n-1$
所以对于以任意一点为端点的所有对角线的交点便是:$m=\sum_{k=3}^{n-1}(n-k)(k-2)$,对$n$个点进行同样的操作就得到$nm$,而注意到如果这样写,每个交点对应两条对角线的四个端点都作为了一次起点,也就是说每个交点都被算了四次,所以我们要的答案应该是$ans=\frac{1}{4}nm$,式子推出来啦!
接着就可以编程求解了…首先整个问题的时间复杂度是$O(n)$,轻轻松松通过,不过我们注意到对应答案的上界是$O(n^3)$级别的也就是$10^{15}$级别的差不多,一开始我只开了个long long交上去然后挂了两个点…后面改成unsigned long long 就过了…emm好吧
话说回来我们再回头看看那个和式$m=\sum_{k=3}^{n-1}(n-k)(k-2)$,好像我们并不陌生呀!
里面展开就是$nk-2n-k^2-2k$我们对k求和就稍微整理一下变成$\sum_{k=3}^{n-1}[k(n-2)-2n-k^2]$,嗯第一项是等差数列,第二项是对于$k$的常数列,第三项是平方和,我们有结论$\sum_{k=1}^{n}k^2=\frac{1}{6}n(n+1)(2n+1)$,对于这题只要改个$n$再扣掉前两项就行
整个和式拆开再化简就得到这题的答案可以写成:
$\frac{n}{4}[\frac{1}{2}(n+2)^2-2(n^2-3n)-\frac{1}{6}n(n-1)(2n-1)+5]$
整个问题变成$O(1)$的复杂度啦!~(虽然好像没什么用,哈哈哈)
[打基础]luogu2181对角线——计数原理的更多相关文章
- STM32F4_TIM基本延时(计数原理)
Ⅰ.概述 STM32的TIM定时器分为三类:基本定时器.通用定时器和高级定时器.从分类来看就知道STM32的定时器功能是非常强大的,但是,功能强大了,软件配置定时器就相对复杂多了.很多初学者甚至工作了 ...
- Luogu 1351 NOIP 2014 联合权值(贪心,计数原理)
Luogu 1351 NOIP 2014 联合权值(贪心,计数原理) Description 无向连通图 G 有 n 个点,n-1 条边.点从 1 到 n 依次编号,编号为 i 的点的权值为 Wi, ...
- 【计数原理】【UVA11538】 Chess Queen
传送门 Description 给你一个n*m的棋盘,在棋盘上放置一黑一白两个皇后,求两个皇后能够互相攻击的方案个数 Input 多组数据,每组数据包括: 一行,为n和m 输入结束标志为n=m=0. ...
- Objective-C 引用计数原理
http://www.cocoachina.com/ios/20160112/14933.html 引用计数如何存储 有些对象如果支持使用 TaggedPointer,苹果会直接将其指针值作为引用计数 ...
- oc引用计数原理-引用计数相关变化
http://blog.csdn.net/null29/article/details/71191044 在 32 位环境下,对象的引用计数都保存在一个外部的表中,每一个对象的 Retain 操作,实 ...
- polay计数原理
公式: Burnside引理: 1/|G|*(C(π1)+C(π2)+C(π3)+.....+C(πn)): C(π):指不同置换下的等价类数.例如π=(123)(3)(45)(6)(7),X={1, ...
- 数学计数原理(Pólya):POJ 1286 Necklace of Beads
Necklace of Beads Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7763 Accepted: 3247 ...
- 组合数学(Pólya计数原理):UvaOJ 10601 Cubes
Cubes You are given 12 rods of equal length. Each of them is colored in certain color. Your task is ...
- 数学计数原理(Pólya,高精度):SGU 294 He's Circles
He's Circles He wrote n letters "X" and "E" in a circle. He thought that there ...
随机推荐
- 如何能够将MathType工具栏放大?
作为专业的公式编辑器,MathType受到了很多用户的青睐,因为借助它可以快速编写出想要的各种数学公式.但是有的用户发现MathType工具栏中的符号有一些小,那么为了方便使用,能不能将工具栏放大呢? ...
- windows创建隐藏用户的powershell脚本
通过保存并重新注册已删除用户的注册表的方式来隐藏用户,未登录时登陆界面不可见,登陆后可见 方法详情见: https://www.k0rz3n.com/2018/06/26/windows%E6%B8% ...
- kafka对接Rancher日志
kafka对接Rancher日志 目录 kafka对接Rancher日志 概述 环境准备 正常对接kafka集群 1.helm添加bitnami库 2.下载 kafka 对应的chart压缩文件 3. ...
- Vue 3.0 升级指南
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 2020年9月18日Vue 3.0正式发布,距离2016年10月1日Vue ...
- Qt5字符串编码转换学习
目录 1.通过Python3示例探索常用字符串编码 UTF8 ANSI Unicode 小结 2.Qt5中使用QTextCodec进行编码转换 小结 1.通过Python3示例探索常用字符串编码 下面 ...
- xios封装
封装的意义 1.提高代码可读性2.提高代码可维护性3.减少代码书写 封装 import axios from 'axios' axios.defaults.baseURL = 'http://127. ...
- 在腾讯云容器服务 TKE 中利用 HPA 实现业务的弹性伸缩
在 TKE 上利用 HPA 实现业务的弹性伸缩 概述 Kubernetes Pod 水平自动扩缩(Horizontal Pod Autoscaler,以下简称 HPA)可以基于 CPU 利用率.内存利 ...
- JZOJ 【NOIP2016提高A组集训第16场11.15】兔子
JZOJ [NOIP2016提高A组集训第16场11.15]兔子 题目 Description 在一片草原上有N个兔子窝,每个窝里住着一只兔子,有M条路径连接这些窝.更特殊地是,至多只有一个兔子窝有3 ...
- jupyter notebook 将当前目录设置为工作目录
生成配置文件首先打开你的CMD或者是终端(Linux),在你配置过环境变量的基础下,你直接输入以下命令: jupyter notebook --generate-config 然后打开生成的配置文件, ...
- String、StringBUffer和StringBuilder的区别与使用
一.区别 String是一个不可变的类,即创建String对象后,该对象中的字符串是不可变的,平时我们改变String对象中的字符串实际上是通过StringBuffer实现的,所以StringBuff ...