题目链接:http://codeforces.com/problemset/problem/192/A
Description
As you very well know, this year's funkiest numbers are so called triangular numbers (that is, integers that are representable as , where k is some positive integer), and the coolest numbers are those that are representable as a sum of two triangular numbers.
A well-known hipster Andrew adores everything funky and cool but unfortunately, he isn't good at maths. Given number n, help him define whether this number can be represented by a sum of two triangular numbers (not necessarily different)!
Input
The first input line contains an integer n (1 ≤ n ≤ 109).
Output
Print "YES" (without the quotes), if n can be represented as a sum of two triangular numbers, otherwise print "NO" (without the quotes).
Examples Input
256
Output
YES
Input
512
Output
NO
Note
In the first sample number .
In the second sample number 512 can not be represented as a sum of two triangular numbers.
AC代码
//其实这题枚举就可以
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int N;
while(cin >> N) {
bool flag = false;
N *= 2;
for(int k=1;k<=sqrt(N)+1;k++) {
int l=1,r=sqrt(N)+1;
int mid;
while(l<=r) {
mid = l+(r-l)/2;
int t = k*(k+1)+mid*(mid+1);
if(t == N) {
flag = true;
break;
}
else if(t > N)
r = mid-1;
else
l = mid+1;
}
if(flag)
break;
}
if(flag)
cout << "YES\n";
else
cout << "NO\n";
}
}