本文主要是介绍Gym - 100623D Deposits,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目链接: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;
}
- 列表内容
这篇关于Gym - 100623D Deposits的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!