1221. 四平方和
题目描述:
解题思路: 预处理a和b时使用unordered_map()保存结果,再枚举c,d ;
hash_map , unordered_map本质是一样的,只不过 unordered_map被纳入了C++标准库标准。
unordered_map()介绍:
基于哈希表,数据插入和查找的时间复杂度很低,几乎是常数时间,而代价是消耗比较多的内存。
#include <iostream>
#include<algorithm>
#include <unordered_map>
using namespace std;
typedef pair<int ,int > PII;
unordered_map<int, PII> mp;
int n;
void Slove()
{
for (int a = 0; a * a <= n / 4; a++)
for (int b = a; a * a + b * b <= n / 2; b++)
{
int t = n - a * a - b * b;
if(mp.count(t)){
cout<<a<<" "<<b<<" "<<mp[t].first<<" "<<mp[t].second<<" "<<endl;
return ;
}
}
}
int main()
{
cin >> n;
for (int c = 0; c * c <= n / 2; c++)
for (int d = c; c * c + d * d <= n; d++)
{
int t = c * c + d * d;
if(mp.count(t) == 0) mp[t] = {c , d};
}
Slove();
return 0;
}