51nod1305 Pairwise Sum and Divide

题目链接: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 ;
}
上一篇:51nod 1305:Pairwise Sum and Divide


下一篇:iPhone应用中如何避免内存泄露?