和熊神两个人做的练习比赛
11题,一共A掉9个,看着q神2个多小时就ak了,感觉自己还是太弱了
唉
E 待补,到时候再写一下题解。
G 题
第四象限的情况有点特殊,我们提出来处理就好了。
I
感觉又像个简单的数论吧,直接贴一下代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<map>
#include<vector>
#define mem(a) memset(a,0,sizeof(a))
#define INF 0x7fffffff //INT_MAX
#define inf 0x3f3f3f3f //
const double PI = acos(-1.0);
const double e = exp(1.0);
template<class T> T gcd(T a, T b) { return b ? gcd(b, a % b) : a; }
template<class T> T lcm(T a, T b) { return a / gcd(a, b) * b; }
template<class T> inline T Min(T a, T b) { return a < b ? a : b; }
template<class T> inline T Max(T a, T b) { return a > b ? a : b;}
using namespace std;
int a[10005];
int flag[1000005];
__int64 g[1000005];
__int64 ans;
void get(int maxn){
for(int i=2;i<=maxn;i++){
if(flag[i]>0){
ans+=(__int64)(flag[i])*(flag[i]-1)/2;
for(int j=2;j*i<=maxn;j++){
if(flag[i*j]>0){
ans+=flag[i]*flag[i*j];
// printf(" %I64d %d %d\n",ans,i,i*j);
}
}
}
}
}
int main(){
int t;
//freopen("1.txt","r",stdin);
while(~scanf("%d",&t)){
while(t--){
mem(flag);
// mem(g);
int n;
ans=0;
scanf("%d",&n);
int maxn=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
maxn=max(maxn,a[i]);
flag[a[i]]++;
}
get(maxn);
printf("%I64d\n",ans);
}
}
return 0;
}