#P16527. [Dapc2024]fractal area

[Dapc2024]fractal area

题目背景

当地数学研究所的负责人准备在墙上绘制一些分形图案。为了确定这些图案是否适合墙面的大小,同时计算所需油漆量,需要求出最终分形图形的面积。

题目描述

给定一条从 (0,0)(0,0)(1,0)(1,0) 的折线。

最初有一个边长为 11 的等边三角形。之后,对其边界上的每一条线段进行递归替换:将该线段替换为原折线经过适当缩放和旋转后得到的副本,使副本的两个端点与原线段的两个端点重合,并保持方向一致。

这一替换过程无限进行,最终形成一个分形图形。请计算该分形图形的面积。

下图展示了第一个样例所给折线以及最终形成的 Koch 雪花。

第一个样例的折线与最终分形

输入格式

第一行包含一个整数 nn,表示定义折线的点数。

接下来 nn 行,每行包含两个浮点数 x,yx,y,表示折线上的一个点。各点按照它们在折线上的顺序给出。

保证:

  • 2n10002\le n\le 1000
  • 0x10\le x\le 1
  • y<0.5|y|<0.5
  • 所有浮点数的小数点后恰好有 66 位;
  • 第一个点为 (0,0)(0,0)
  • 最后一个点为 (1,0)(1,0)
  • 最终分形收敛,并且不会与自身发生重叠。

输出格式

输出最终分形图形的面积。

当你的答案与标准答案的绝对误差或相对误差不超过 10610^{-6} 时,视为正确。

样例 1

输入

5
0.000000 0.000000
0.333333 0.000000
0.500000 0.288675
0.666667 0.000000
1.000000 0.000000

输出

0.692820545

样例 2

输入

5
0.000000 0.000000
0.200000 0.000000
0.600000 -0.200000
0.500000 0.000000
1.000000 0.000000

输出

0.237360528

难度评定

本题的核心是把每一层新增面积表示成相似缩放后的递推关系:既要计算原折线一侧的有向面积,又要计算所有子线段长度平方之和所形成的缩放系数,最后求无限等比级数。几何建模、符号方向与浮点精度都容易出错。

估计 Codeforces 评分:2200