1,排序不等式
最小的放最前面,被计算的次数是n-i次
总时间的公式:(t[i] * (n - i - 1))
代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 1e5 + 10;
typedef long long LL;
int t[N];
int n;
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>t[i];
}
sort(t, t + n);
LL res = 0;
for(int i=0;i<n;i++) res += (t[i] * (n - i - 1));
cout<<res<<endl;
return 0;
}
2,绝对值不等式
代码:
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
const int N = 100010;
int n;
int a[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
sort(a, a + n);
int res = 0;
for(int i=0;i<n;i++) res += (abs(a[i] - a[n / 2]));
cout<<res<<endl;
return 0;
}
3,推公式
代码:
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 50010;
typedef pair<int, int> PII;
int n;
PII cow[N];
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
int w, s;
cin>>w>>s;
cow[i] = {w + s, w};
}
sort(cow, cow + n);
int res = -2e9, sum = 0;
for(int i=0;i<n;i++)
{
int w = cow[i].second, s = cow[i].first - w;
res = max(res, sum - s);
sum += w;
}
cout<<res<<endl;
return 0;
}