题目
题意: 求个求和.
思路: 套路题,不会套路。观察到求和至多是1e7,所以数的种类也就根号(2e7)。那么按两个数组数的种类来枚举,最多2e7的时间复杂度。
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1e6+10;
int n,m,k,T;
int a[N];
int b[N];
map<int,int> l,r;
void solve()
{
cin>>n;
for(int i=1;i<=n;++i) {int x; cin>>x;l[x]++;}
for(int i=1;i<=n;++i) {int x; cin>>x;r[x]++;}
ll ans = 0;
for(auto item:l)
{
int x = item.first;
int cnt1 = item.second;
for(auto item2:r)
{
int y = item2.first;
int cnt2 = item2.second;
int t = sqrt(abs(x-y));
ans += 1ll*cnt1*cnt2*t;
}
}
cout<<ans;
}
signed main(void)
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
// cin>>T;
solve();
return 0;
}