蓝桥杯国赛 皮亚诺曲线距离
Posted Jozky86
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯国赛 皮亚诺曲线距离相关的知识,希望对你有一定的参考价值。
题意:
题解:
这个很恶魔
本质好说就是找规律,但是贼难写。。
找了篇题解,做法就是大化小,将大阶化为成小阶,计算出离远点的距离。。。我感觉我是写不出来。。
挺秒的,要推公式估计要一阵子
代码:
#include<iostream>
#include<utility>
#include<vector>
#include<cmath>
using namespace std;
typedef pair < int , int > location;
typedef long long ll;
ll cacl(ll n,location loca)//n级皮亚诺,此时的坐标位置左下角为原点
ll pre_len=pow(3,n-1);
ll total=0;
location xy(loca.first/pre_len,loca.second/pre_len);
ll x=loca.first,y=loca.second;
ll num=0;
if(xy.first==0)
num=xy.second+1;
else if(xy.first==1)
if(xy.second==2)num=4;
else if(xy.second==1)num=5;
else num=6;
else
num=7+xy.second;
total+=pre_len * pre_len * (num-1);
if(n==1)
return total;//结束标志
location pre(loca);
if(num==1);
else if(num==2)
pre=make_pair(-(x-pre_len+1),y-pre_len);
else if(num==3)
pre=make_pair(x,y-2*pre_len);
else if(num==4)
pre=make_pair(x-pre_len,-(y-3*pre_len+1));
else if(num==5)
pre=make_pair(-(x-2*pre_len+1),-(y-2*pre_len+1));
else if(num==6)
pre=make_pair(x-pre_len,-(y-pre_len+1));
else if(num==7)
pre=make_pair(x-2*pre_len,y);
else if(num==8)
pre=make_pair(-(x-3*pre_len+1),y-pre_len);
else
pre=make_pair(x-2*pre_len,y-2*pre_len);
return total+cacl(n-1,pre);
int main()
ll n,x1,y1,x2,y2;
cin>>n>>x1>>y1>>x2>>y2;
location first(x1,y1),second(x2,y2);
//cout<<first.first<<endl;
cout<<abs(cacl(n,first)-cacl(n,second));
return 0;
以上是关于蓝桥杯国赛 皮亚诺曲线距离的主要内容,如果未能解决你的问题,请参考以下文章
蓝桥杯国赛真题08python约分 蓝桥杯青少年组python编程 蓝桥杯国赛真题解析
蓝桥杯国赛真题08python约分 蓝桥杯青少年组python编程 蓝桥杯国赛真题解析