zoukankan      html  css  js  c++  java
  • poj 2100 尺取法 一个数字拆成连续数字平方和

    题意:将一个数拆成若干个连续数字的平方和。

    用尺取法枚举区间,复杂度为O(n),时限10s,3s多ac。

     1 #include <iostream>
     2 #include <cstring>
     3 #include <cstdio>
     4 #include <cmath>
     5 using namespace std;
     6 
     7 const int N = 100;
     8 
     9 struct Node
    10 {
    11     int from, to;
    12 } node[N];
    13 
    14 void solve( long long n )
    15 {
    16     int u = sqrt( n * 1.0 ), cnt = 0, q = 1;
    17     long long sum = 0;
    18     for ( int i = 1; i <= u; i++ )
    19     {
    20         sum += ( long long ) i * i;
    21         while ( sum > n )
    22         {
    23             sum -= ( long long ) q * q;
    24             q++;
    25         }
    26         if ( sum == n )
    27         {
    28             node[cnt].from = q;
    29             node[cnt].to = i;
    30             cnt++;
    31         }
    32     }
    33     printf("%d
    ", cnt);
    34     for ( int i = 0; i < cnt; i++ )
    35     {
    36         printf("%d", node[i].to - node[i].from + 1);
    37         for ( int j = node[i].from; j <= node[i].to; j++ )
    38         {
    39             printf(" %d", j);
    40         }
    41         puts("");
    42     }
    43 }
    44 
    45 int main ()
    46 {
    47     long long n;
    48     while ( scanf("%lld", &n) != EOF )
    49     {
    50         solve(n);
    51     }
    52     return 0;
    53 }
  • 相关阅读:
    iOS 界面翻转切换动画
    深度解析Objective-C笔试题
    Objective-C内存管理基础
    Objective-C入门教材
    Objective-C代码学习大纲(6)
    Objective-C代码学习大纲(5)
    Objective-C代码学习大纲(4)
    sharedPreferences
    ListView判断滑动底部
    Oracle 游标疑问
  • 原文地址:https://www.cnblogs.com/huoxiayu/p/4654518.html
Copyright © 2011-2022 走看看