题目大意:
三位游泳者决定在游泳池里组织一个聚会!中午,他们从游泳池的左侧开始游泳。第一个游泳者游过整个游泳池并回来正好需要一分钟,第二个游泳者正好需要b分钟,第三个游泳者正好需要c分钟。因此,第一名游泳选手将在0,a,2a,3a,……之后出现在泳池的左侧。开始时间过后几分钟,第二次将在0,b,2b,3b,…。在0,c,2c,3c,……之后,第三个将会在游泳池的左侧。几分钟。
就在他们开始游泳的p分钟后,你来到了游泳池的左侧。确定在其中一名游泳者到达游泳池左侧之前,你必须等待多长时间。
输入格式
输入的第一行包含单个整数t(1≤t≤1000)-测试用例的数量。下一个测试行包含测试用例描述,每行一个。每条线包含四个整数p,a,b和c(1≤p,a,b,c≤1018),时间以开始后的分钟为单位,当你来到游泳池时,以及游泳者穿过整个游泳池并返回的时间(以分钟为单位)。
输出格式
对于每个测试用例,输出一个整数-在一个游泳者到达游泳池左侧之前,您必须等待多长时间(以分钟为单位)。
Example
input
4
9 5 4 8
2 6 10 9
10 2 5 10
10 9 9 9
output
1
4
0
8
如果有p能被a,b,c整除,则说明已经有个人在左侧,不需要等待
不能被整除的话,在每个人到来的时间中取最小值
AC代码:
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll min(ll a,ll b){return a<b?a:b;}
ll min(ll a,ll b,ll c){
return min(min(a,b),c);
}
int main(){
int T;
scanf("%d",&T);
while(T--){
ll p,a,b,c;
scanf("%lld %lld %lld %lld",&p,&a,&b,&c);
if((p%a)&&(p%b)&&(p%c))printf("%lld\n",min(a-p%a,b-p%b,c-p%c));
else printf("0\n");
}
return 0;
}