Educational Codeforces Round 63 (Rated for Div. 2) C. Alarm Clocks Everywhere gcd

时间:2023-03-09 06:28:33
Educational Codeforces Round 63 (Rated for Div. 2) C. Alarm Clocks Everywhere gcd

题意:给出一个递增的时间序列a  给出另外一个序列b  (都是整数)

以b中任选一个数字作为间隔  自己从1开始任选一个时间当成开始时间

输出选择的数字标号以及 开始时间

思路  直接求间隔的公共gcd 然后看 给的序列b 中有没有数 b[i]|gcd 即可

如果没有则输出-1

 #include<bits/stdc++.h>
#define mkp make_pair
#define pb push_back
#define F first
#define S second
using namespace std;
typedef long long ll;
const int maxn=3e5+;
ll a[maxn],b[maxn];
vector<pair<ll,ll> >v;
ll gcd(ll a,ll b){
return b==?a:gcd(b,a%b);
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
ll tmp=; for(int i=;i<=n;i++)
{
scanf("%lld",&a[i]); }
for(int i=;i<=n-;i++){
b[i]=a[i+]-a[i];
}
tmp=b[];
for(int i=;i<=n-;i++){
tmp=gcd(b[i],tmp);
}
//cout<<tmp<<endl;
int ok=;
for(int i=;i<=m;i++)
{
ll zz; scanf("%lld",&zz);
if(ok)continue;
if(tmp%zz==){
cout<<"YES\n";
cout<<a[]<<" "<<i<<endl;
ok=;
}
//v.pb(mkp(zz,1ll*i));
//cout<<i<<endl;
}
if(!ok)
cout<<"NO\n"; /*sort(v.begin(),v.end()); int p=lower_bound(v.begin(),v.end(),mkp(tmp,1ll*0))-v.begin();
if(p>=v.size()){
cout<<"NO\n";
return 0;
}
else {
if(v[p].F!=tmp){
// cout<<v[p].F<<endl;
cout<<"NO\n";
return 0;
}
else{
cout<<"YES\n";
cout<<a[1]<<" "<<v[p].S<<endl;
}
}*/
return ;
}