将a[]数组排序,求它的逆序和即可,这个很直观但是需要数学证明,证明见排序不等式
需要注意的是ai的最大值为10,0000,ai*ai的最大值为10^10,超过了INT_MAX=2147483647,需要使用long long 类型
还有就是最后要求结果取余10007
AC代码如下
#include<iostream>
#include<algorithm>
using namespace std;
long long n,a[100000],ans=0;
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a,a+n);
for(int i=0;i<n;i++) ans=(ans+a[i]*a[n-i-1])%10007;
cout<<ans;
return 0;
}