AT1980 [AGC001B] Mysterious Light 题解

# 题意:
高桥 くん 有一个边长为 N 的三枚镜子构成的正三角形 , 顶点为 a, b, c. 他有一个超级步枪 , 放在 AB 段的P点上,使得 AP=X 。 并沿着平行于 BC 的方向发射一道光 。

 



光以直线传播 , 以镜子的形式反射 , 但是有一个特殊的地方 : 它会被自己的轨迹反射 , 当光回到步枪的时候 , 光被吸收 。  下面的图显示了当 n=5 ,x=2 时的光轨迹 。 求出光线的总长度 。
# 题解:
### 本体采用递归求解
图中射出的第一条线加上第二条线就等于线段 ab :

 



所以递归是可以不把第一条线和第二条线计算上。

新增加的为 $ 2\times (x-x\bmod y) $ 用一个计数变量计入可 ;

当到最后一步 $ 2-x \bmod y $ ,就增加了 $ 2 \times x-y $


# CODE:


#include <bits/stdc++.h>
using namespace std;
long long ans;
void gx( long long n, long long x )
{
    if ( n % x == 0 )
    {
        ans += n * 2 - x;
        return;
    }else  {
        ans += (n - n % x) * 2;
        gx( x, n % x );
    }
}


int main()
{
    long long n, x;
    cin >> n >> x;
    ans    = n;
    n    -= x;
    gx( max( n, x ), min( n, x ) );
    cout << ans;
    return(0);
}



posted @ 2021-10-29 20:58  ㅤSmartBig  阅读(221)  评论(1)    收藏  举报