zoukankan      html  css  js  c++  java
  • Funky Numbers CodeForces

    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).

    Example

    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.

    写得有点丑~~~

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<math.h>
     5 #include<string>
     6 using namespace std;
     7 typedef long long ll;
     8 
     9 int n;
    10 ll cal(ll ans){
    11    return ans*(ans+1)/2;
    12 }
    13 
    14 int main()
    15 {  while(~scanf("%d",&n)){
    16        int flag=0;
    17        for(int i=1;i<=sqrt(2*n)+1;i++){
    18               ll sum=n-cal(i);
    19               ll l=i,r=sqrt(2*n)+1;
    20               ll mid;
    21               while(l<r){
    22                     mid=(l+r)/2;
    23                     if(cal(mid)==sum){
    24                          flag=1;
    25                          break;
    26                     }
    27                     if(cal(mid)<sum) l=mid;
    28                     else r=mid;
    29                     if(r-l==1){
    30                          if(cal(r)==sum||cal(l)==sum){
    31                              flag=1;
    32                              break;
    33                          }
    34                          else break;
    35                     }
    36               }
    37               if(flag) break;
    38        }
    39        if(flag) printf("YES
    ");
    40        else printf("NO");
    41    }
    42 }
  • 相关阅读:
    Linux学习记录(四):Shell脚本
    Linux学习记录(三):Vim
    基于PyTorch构建神经网络
    Python开发【第一篇】:初识Python
    asyncio 并发编程(二)
    asyncio 并发编程(一)
    Linux 文件和目录操作命令(一)
    Django Model
    Django 之 Form 组件
    Django 模板系统
  • 原文地址:https://www.cnblogs.com/zgglj-com/p/6752116.html
Copyright © 2011-2022 走看看