给你n个起始时间和m个闹钟,对于每个闹钟,你可以定义它的开始响的时间y,然后它会每隔pi分钟响一下,问你是否能提醒这n个时间,如果能请随意输出一组y和选择的闹钟的位置。像极了之前div2的C题,也是求一遍GCD我感觉和那道题的想法基本一样,所以直接写出来了,可以参考这篇博客:点击这里
AC代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stdlib.h>
#include<queue>
#include<map>
#include<set>
#include<iomanip>
#include<math.h>
using namespace std;
typedef long long ll;
typedef double ld;
const int INF = 0x3f3f3f3f;
const int N = 300005;
int i,j,k;
int cnt,temp,pos;
int n,m;
int x,y,z;
ll a[N],b[N],c[N];
bool flag;
int main()
{
scanf("%d %d",&n,&m);
for(i=0; i<n; i++)
scanf("%lld",&a[i]);
for(i=0; i<m; i++)
scanf("%lld",&b[i]);
flag=0;
for(i=0;i<n-1;i++)
{
c[i]=a[i+1]-a[i];
}
ll ans=c[0];
ll res;
for(i=1;i<n-1;i++)
{
ans=__gcd(ans,c[i]);
}
for(i=0;i<m;i++)
{
if(ans%b[i]==0)
{
res=i+1;
flag=1;
break;
}
}
if(flag)
{
printf("YES\n%lld %lld\n",a[0],res);
}
else
cout<<"NO"<<endl;
return 0;
}