2019ACM首尔J题题解

Posted et3-tsy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2019ACM首尔J题题解相关的知识,希望对你有一定的参考价值。

J 数学/找规律

题意:

给定正n多边形,现在要你通过顶点连线的方式,将它划分完全划分成若干个三角形。我们定义两个三角形的距离为,两者相隔的完整的三角形数+1。

如下图,a与d的距离为3,a与c的距离为2

现在你要让所有两两三角形的距离中,最大距离的最小。求该最小值

(数据范围n为3-1e6)

技术图片

题解

这个距离其实就是两个三角形之间隔离几条线(包括自身三角形的)

这题首先应该确定划分方案

由于分割出三角形的数量是一定的,说明线的数量也是一定的

技术图片

观察上图,不难发现,当某点集中了过多的线时,最大距离显然会很大,所以我们思路应该是让一定的线,尽量的分散他们的交点位置,如下图所示

技术图片

不难发现,下面的划分方案具有良好的推广性:

在未被划分的多边形内,以逆时针方向,依次选取三个点ABC,AC连线

接下来就是求最小值是多少了

依据我们上面这种划分规则,由于我们取的是最远距离,所以每多转一圈,我们肯定多一对线,即距离要+2

值得注意的是,如下图这种情况,奇数会少一条边,留给下圈逆时针

技术图片

接下来只要递归计算一下就可以了,要留意递归终点。

标程


#include<iostream>
#include<cstring>
using namespace std;
int n;
int ans[11]={0,0,0,0,1,2,2,3,3,4,4};
int dfs(int x)
{
	if(x<=10)
	return ans[x];
	else
	{
		if(x%2)
		return dfs(x/2+1)+2;
		else
		return dfs(x/2)+2;
	}
}
int main()
{
	cin>>n;
	cout<<dfs(n);
	return 0;
}

以上是关于2019ACM首尔J题题解的主要内容,如果未能解决你的问题,请参考以下文章

SWPU-ACM集训队周赛之组队赛(3-11) C题题解

SWPU-ACM集训队周赛之组队赛(3-11) E题题解

4.6 每日一题题解

4.22 每日一题题解

《ACM国际大学生程序设计竞赛题解Ⅰ》——基础编程题

2014ACM/ICPC亚洲区北京站题解