AGC001 B Mysterious Light

17 篇文章 0 订阅

题意

有一个边长为 N(2<=N<=10^12)的由镜子围成的等边三角形,设结点为a,b,c,从ab上取一点p,使得ap=X(1<=X<=N-1),从p水平向右发射一条神秘光线,经过若干次反射,回到p点。这条神秘光线有一个特点,他会在他走过的路径留下一条反射镜(光线会被自己走过的路线反射),求最后回到p点时,光线移动的距离

题解

我是打表找规律…
听说模拟也是正解…
我们来看正解的分析
第一次弹出距离是X,第二次变成了N-X,之后是if(a>b) a-=b;else b-=a
是不是就是辗转相减法?
然后呢听说似乎可以通过一系列边的平移,使得答案变成一个边长为n-gcd(n,x)的三角形…

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
ll gcd(ll x,ll y){
    if(!y)
        return x;
    return gcd(y,x%y);
}
ll n,m;
int main()
{
   // freopen("light.in","r",stdin);
   // freopen("light.out","w",stdout);
    scanf("%lld%lld",&n,&m);
    ll k=n-gcd(n,m);
    printf("%lld\n",k*3);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值