题目链接: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; }