题目:
思路:
考虑到如果直接开bool数组会爆,不是一个数量级的,所以搞了个map
map内部是红黑树实现的,unordered_map内部是hash表实现的,所以实际上这道题用unordered_map查找起来会更加方便
代码:
#include <cstdio>
#include <iostream>
#include <map>
using namespace std;
const int maxn=511111;
int n;
map<int,bool> m;
bool flag;
int main()
{
cin>>n;
for(int i=1;i*(i+1)/2<=n;i++)
{
long long temp;
temp=(long long)i*(i+1)/2;
m[temp]=1;
}
for(int i=1;i*(i+1)/2<=n/2;i++)
{
long long temp;
temp=(long long)i*(i+1)/2;
if(m.find(n-temp)!=m.end())
{
flag=1;
break;
}
}
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
return 0;
}