/*
解法大拟
对于每个集合内数字不断+a
看看是否在整数里存在并且在集合内不存在(即值为1)
存在就加入并且计数
直到加到比最大的那个整数还大
使用桶来判断是否在整数里存在且在集合内不存在
所有在集合内存在的设定为2
所有只在整数内存在的设定为1
所有不存在与整数内以及集合内的设定为0
*/
#include<bits/stdc++.h>
using namespace std;
int num[601000],p[6010];
int main()
{
int a,maxn=-100,n,m,k,count=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&k);
maxn=max(k,maxn);
num[k]=1;
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d",&k);
p[i]=k;
num[k]=2;
}
scanf("%d",&a);
//输入
for(int i=1;i<=m;i++)
{
while(1)
{
p[i]+=a;
if(p[i]>maxn) break;
if(num[p[i]]==1)
{
count++;
num[p[i]]=2;
}
}
}
//算法主体
if(count==0) cout<<"Great Set!";
else cout<<count;
return 0;
}
评测记录
确实找不到有啥能越界的原因