Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
AC Code~~~~C++#include<stdio.h> #include<map> #include<cmath> using namespace std; const int dx[]={1,2,2,1}; const int dy[]={1,1,2,2}; inline double sqr(int a){ double s=a*a; return s; } struct Fra{ int o,a,b; pair <int,int> solve(int order,int num){ if(order==1)return make_pair(dx[num-1],dy[num-1]); double div=1<<(2*(order-1)); for(int i=0;i<4;i++){ if(num<=(i+1)*div){ if(i==0){ pair <int,int> tmp=solve(order-1,div-(num-1)); double ax=((1<<(order-1))+1)*1.0/2.0,ay=ax; double cy=-(tmp.first-ax),cx=ay-tmp.second; return make_pair(ax+cx,ay-cy); } if(i==1){ pair <int,int> tmp=solve(order-1,num-i*div); return make_pair(tmp.first+(1<<(order-1)),tmp.second); } if(i==2){ pair <int,int> tmp=solve(order-1,num-i*div); return make_pair(tmp.first+(1<<(order-1)),tmp.second+(1<<(order-1))); } if(i==3){ pair <int,int> tmp=solve(order-1,div-(num-3*div-1)); double ax=((1<<(order-1))+1)/2.0,ay=ax; double cy=tmp.first-ax,cx=tmp.second-ay; return make_pair(ax+cx,ay-cy+(1<<(order-1))); } } } } void init(){ scanf("%d%d%d",&o,&a,&b); } void work(){ pair <int,int> pa=solve(o,a); pair <int,int> pb=solve(o,b); double result=sqrt(sqr(pa.first-pb.first)+sqr(pa.second-pb.second))*10.0; printf("%.0lf\n",result); } }sol; int main(){ int T; scanf("%d",&T); while(T--){ sol.init(); sol.work(); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator