0
点赞
收藏
分享

微信扫一扫

计蒜客 倍数 思维

毅会 2022-06-29 阅读 59

​​传送门​​​ 题意:题意很好理解,找出k的倍数的组合数。
思路:暴力会超时,因为a是1到100的元素,所以先算出1到100中i,j乘积是k的倍数。用一个桶来储存,判断i和j是否相同,进行特判。vis可能会爆int,所以要开ll。
题解:
计蒜客 倍数  思维_#include

#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cstdlib>
#include<queue>
#include<cmath>
#include<cctype>
#include<stack>
#include<map>
#include<string>//#include<bits/stdc++.h>
#include<cstdlib>
#define ll long long
//#define N 100010
using namespace std;
const ll maxn = 1e5 + 5;
const ll minn = 1e9 + 5;
const ll mod = 1000000007;
//ll a[maxn], b[maxn];
ll vis[maxn];
//int ans[maxn];
vector<int>v[maxn];
bool row[maxn], col[maxn];
struct node {
int num;
ll ans;
} s[maxn];
ll a[maxn];
bool cmp(node x, node y) {
return x.ans < y.ans;
}
int main() {
int n, k;
cin >> n >> k;
for(int i = 1; i <= n; i++) {
cin >> a[i];
vis[a[i]]++;
}
ll res = 0;
for(int i = 1; i <= 100; i++)
for(int j = i ; j <= 100; j++) {
if(i * j % k == 0) {
if(i == j) {
res += vis[i] * (vis[i]-1)/2;
} else if(i != j)
res+=vis[i]*vis[j];
}
}
cout << res << endl;
return 0;
}


举报

相关推荐

0 条评论