题目链接:https://vjudge.net/problem/Gym-100623D
题意:给你n个数a[i],和m个数b[i],问你有几对数(a[i]能整除b[i])的
解析:我是直接把1e6里面,各个数的倍数都处理出来,直接加就好了(不过不明白为什么没有T
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 1e6+100;
const int inf = 0x7fffffff;
int a[maxn];
int vis1[maxn];
int vis2[maxn];
int main(void)
{
freopen("deposits.in","r",stdin);
freopen("deposits.out","w",stdout);
int n,m;
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d",&m);
for(int i=0;i<m;i++)
{
int x;
scanf("%d",&x);
vis1[x]++;
}
for(int i=1;i<maxn;i++)
{
for(int j=i;j<maxn;j+=i)
vis2[j] += vis1[i];
}
long long ans = 0;
for(int i=0;i<n;i++)
ans += vis2[a[i]];
printf("%I64d\n",ans);
return 0;
}
- 列表内容