题目链接:51nod 1305 Pairwise Sum and Divide
看完题我想都没想就直接暴力做了,AC后突然就反应过来了。。。
Floor( (a+b)/(a*b) )=Floor( (1/b)+(1/a) )
当a=1时:若b=1,则该式等于2,否则该式等于1
当a=b=2时:该式等于1
其余情况都等于0,所以只需要统计1和2的个数就行了。
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int main(){
int n, i, a;
int s1 = , s2 = , ss = ;
scanf("%d", &n);
for(i = ; i < n; ++i){
scanf("%d", &a);
if(a == ) s1++;
else if(a == ) s2++;
else ss++;
}
ll ans = (ll)s1*(s1-) + (ll)s1*(s2+ss) + (ll)s2*(s2-)/;
printf("%lld\n", ans);
return ;
}