腾讯的一笔画游戏

来源:互联网 发布:unity3d游戏场景下载 编辑:程序博客网 时间:2024/04/28 04:23

腾讯开发了一款益智游戏:一笔画。在一个正 nn 边形上,将 nn 条边的中点连结,形成一个新的正 nn 边形,之后再在新的正 nn 边形内连结各个中点,如此重复 kk 次,作为游戏的初始图案。

玩家要从初始图案最外层 nn 个顶点中的一个出发,进行无公共 端点 的一笔画。

端点 包含:

  1. 起点

  2. 终点

  3. 一笔画中方向发生改变的顶点。

画出的长度即为最后的得分,求玩家在给定的图形上最多能得多少分。

比如在一个边长为 100100k=1k=1 的正方形图案上进行一笔画,最优的方案如下:

输入格式

输入第一行有 22 个用一个空格分隔的整数 n(3 \leq n \leq 100)n(3n100) 和 k(0 \leq k \leq 20)k(0k20)nn 为边数,kk 为重复次数。

输入第二行有一个浮点数 L(0 < L \leq 10^3)L(0<L103),表示最外层正 nn 边形的边长。

输出格式

输出一行,表示最多能得多少分。结果误差在 10^{-3}103 以内均被认为是正确的。

样例输入1

4 0100

样例输出1

300

样例输入2

4 1100

样例输出2

562.1320343
思路:
画一个图就找到规律了。
AC代码:
#include<iostream>#include<functional>#include<algorithm>#include<cstring>#include<string>#include<vector>#include<cstdio>#include<cmath>#include<set>#include<map>using namespace std;#define CRL(a) memset(a,0,sizeof(a))#define QWQ ios::sync_with_stdio(0)//typedef unsigned __int64 LL;//typedef  __int64 ll;typedef unsigned long long LL;typedef  long long ll;const int T = 200000+50;const int mod = 1000000007;const double PI = 3.1415926535898;int main(){#ifdef zscfreopen("input.txt","r",stdin);#endifint n,m,k,i,j;double len;while(~scanf("%d%d",&n,&m)){scanf("%lf",&len);//余弦定理可知://b²=a²+c²-2ac×cosα//正n边形每个内角的度数公式//(n-2)*180/ndouble area = (n-2)*180.0/n;double ans = len*(n-1)+len/2;if(m==0)ans -= len/2;for(i=0;i<m;++i){len = 2*(len/2)*(len/2)-2*(len/2)*(len/2)*cos(area*PI/180);len = sqrt(len);ans += len*(n-1);if(i!=m-1){ans += len/2;}}printf("%lf\n",ans);}return 0;}


0 0
原创粉丝点击