题解 | #优雅的点-mp查平方差#
优雅的点
http://www.nowcoder.com/practice/0960cb46233b446687b77facc9148b89
//if(mp.find(N-it->first)!=mp.end()) //不是说没有访问map<int,bool> 的 map[i] ,map[i]就是false //双for超时了
#include<iostream>
#include<map>
using namespace std;
int main(void)
{
int N;
cin>>N;
int r = (int)sqrt(N);
int count=0;
if(pow(r,2)<N) r+=1;
map<int,bool> mp;
for(int i=1;i<=r;i++) mp[pow(i,2)]==true;
for(map<int,bool>::iterator it=mp.begin();it!=mp.end();it++)
if(mp.find(N-it->first)!=mp.end())
count++;
if(pow(r,2)==N) count++;
cout<<4*count<<endl;;
return 0;
}