题目链接: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;elseansb+=valb-pre;break;}//cout<<ansa<<" "<<ansb<<endl;}if(ansa>ansb)printf("Dasha\n");else if(ansa<ansb)printf("Masha\n");elseprintf("Equal\n");return 0;
}