当前位置: 代码迷 >> 综合 >> CodeForces - 87A - Trains(模拟)
  详细解决方案

CodeForces - 87A - Trains(模拟)

热度:57   发布时间:2024-01-12 15:19:10.0

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