CodeForces - 87A - Trains(模拟)

题目链接:https://cn.vjudge.net/problem/22484/origin

题意:去往Dasha的火车a分钟一辆,去往Masha的火车b分钟一辆,男生在任意时间来到火车站,哪辆火车先到他就去哪里,两个火车同时到,他就选到站频率低的火车

解析:时间从0开始,到LCM(a,b)时两辆火车同时来,这段时间看做一个周期,分析这段时间内的情况就好。

代码:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b;
ll gcd(ll a,ll b)
{
    return b==0?a:gcd(b,a%b);
}
ll lcm(ll a,ll b)
{
    return a*b/gcd(a,b);
}
int main()
{
    scanf("%lld%lld",&a,&b);
    ll pend=lcm(a,b);//pend分钟两火车同时到达
    ll vala=a,valb=b;//vala和vlab迭代接下来两火车到站时间
    ll pre=0;        //前一次某火车到站时间
    ll ansa=0,ansb=0;//分别去往两边的时间和
    while(vala<=pend&&valb<=pend)
    {
        //cout<<pre<<endl;
        if(vala<valb)//a火车先到
        {
            ansa+=vala-pre;
            pre=vala;
            vala+=a;
        }else if(vala>valb){//b火车先到
            ansb+=valb-pre;
            pre=valb;
            valb+=b;
        }else{        //同时到
            if(a>b)
                ansa+=vala-pre;
            else
                ansb+=valb-pre;
            break;
        }
        //cout<<ansa<<"  "<<ansb<<endl;
    }
    if(ansa>ansb)
        printf("Dasha\n");
    else if(ansa<ansb)
        printf("Masha\n");
    else
        printf("Equal\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/sdau20163942/article/details/80273300