题解:CF1142A The Beatles
很数学的一道题啊。
首先假如我们知道了
行驶的总距离应当是
那接下来就是如何求
我一开始想这道题的时候是先忽略了快餐店的位置固定规律。事实上,假如所有快餐店的位置是
但是我们知道,快餐店的位置是可以直接公式表达的对吧?根据题意显然有
所以事实上我们只要枚举
代码很整齐啊。
:::info[code]
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstdio>
using namespace std;
long long n,m,a,b,w_max,w_min;
int main()
{
scanf("%lld %lld %lld %lld",&n,&m,&a,&b);
w_max=n*m/__gcd(n*m,n*m+a+b);
w_min=n*m/__gcd(n*m,n*m+a+b);
for(int i=1;i<=n;i++)
{
w_max=max(w_max,n*m/__gcd(n*m,i*m+a+b));
w_min=min(w_min,n*m/__gcd(n*m,i*m+a+b));
w_max=max(w_max,n*m/__gcd(n*m,abs(i*m-a+b)));
w_min=min(w_min,n*m/__gcd(n*m,abs(i*m-a+b)));
w_max=max(w_max,n*m/__gcd(n*m,abs(i*m+a-b)));
w_min=min(w_min,n*m/__gcd(n*m,abs(i*m+a-b)));
w_max=max(w_max,n*m/__gcd(n*m,abs(i*m-a-b)));
w_min=min(w_min,n*m/__gcd(n*m,abs(i*m-a-b)));
}
printf("%lld %lld",w_min,w_max);
return 0;
}
:::