挺简单,但是为了记录一下wal一发的痛苦
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define fel(i,x,y) for(int i=x;i<=y;i++)
#define fhl(i,x,y) for(int i=x;i>=y;i--)
#define inf 0x3fffffff
#define ll long long
#define pb push_back
#define endl "\n"
ll p,a,b,c;
void slove(){
cin>>p>>a>>b>>c;
if(p%a==0||p%b==0||p%c==0){
cout<<0<<endl;
return;
}
ll t1=(a-p%a);
ll t2=(a-p%b);
ll t3=(c-p%c);
cout<<min({t1,t2,t3})<<endl;
}
int main(){
int t;
cin>>t;
while(t--){
slove();
}
return 0;
}
这个题写的时候乱搞过去了,正解其实也就是这个,就考虑先把目前最大的放到底部。这样就可以产生最大值。大部分题解也就是说使字典序尽量大,所以就是使当前最大的尽量在前面。
最后用一个集合记录一下此时的最大值是什么就好了。
#include<bits/stdc++.h>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define fel(i,x,y) for(int i=x;i<=y;i++)
#define fhl(i,x,y) for(int i=x;i>=y;i--)
#define inf 0x3fffffff
#define ll long long
#define pb push_back
#define endl "\n"
const int N=1e5+100;
int n;
int a[N];