题目链接:
51NOD1305
考察大意:
查找规律
数学证明两点:
网上的题解大都没有给出具体的解释,只是zhuangbi,现在我的解释如下:
1.为什么只要看 1 和 2 的情况就可以了呢?
证明:
一个简单的不等式证明
2.为什么要排序,排序之后的结果为什么不变:
sum是总共的对数,total sum 是算上自己和自己配对的数目。
这个数组无论怎么排序,自己和自己都不会配对,所以,每一对里面两个数都不同。
samesum是自己和自己能配对的数目,就只有n种。
易得:
这样,每两个不同的数都能配对,数目之和相同。
错误之处,烦请留言指正。>-<
CODE:
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cmath>
using namespace std;
const int MAXN = 100000+10;
int n,tmp;
int a[MAXN];
double b[MAXN];
int sum;
int main()
{
sum=0;
scanf("%d",&n);
for(int i=0;i<n;++i)
{
scanf("%d",&a[i]);
//b[i]=1.0/a[i];
}
sort(a,a+n);
for(int i=0;i<n;++i)
{
if(a[i]==1||a[i]==2)
for(int j=i+1;j<n;++j)
sum+=floor((a[i]+a[j])*1.0/(a[i]*a[j]));
else
break;
}
printf("%d\n",sum);
}
/*
3
1 4 1
*/