zoukankan      html  css  js  c++  java
  • hihocoder-1543-SCI表示法

    hihocoder-1543-SCI表示法

    #1543 : SCI表示法

    时间限制:10000ms
    单点时限:1000ms
    内存限制:256MB

    描述

    每一个正整数 N 都能表示成若干个连续正整数的和,例如10可以表示成1+2+3+4,15可以表示成4+5+6,8可以表示成8本身。我们称这种表示方法为SCI(Sum of Consecutive Integers)表示法。  

    小Hi发现一个整数可能有很多种SCI表示,例如15可以表示成1+2+3+4+5,4+5+6,7+8以及15本身。小Hi想知道N的所有SCI表示中,最多能包含多少个连续正整数。例如1+2+3+4+5是15包含正整数最多的表示。

    输入

    第一行一个整数 T,代表测试数据的组数。  

    以下 T 行每行一个正整数N。  

    对于30%的数据,1 ≤ N ≤ 1000  

    对于80%的数据,1 ≤ N ≤ 100000  

    对于100%的数据,1 ≤ T ≤ 10,1 ≤ N ≤ 1000000000

    输出

    对于每组数据输出N的SCI表示最多能包含多少个整数。

    样例输入
    2  
    15  
    8
    样例输出
    5
    1

    找到第一个数为 d, 长度为 len, 则 d + (d + 1) + .... + (d + len - 1 ) = sum; 

    有:  (2 * d + len - 1)*len/2 = sum。  由于 d >= 1, 所以 len*len <= 2*sum 。

    所以,可以根据 len 这个条件, 对sum 进行遍历。 时间复杂度 O(sqrt(n)) 

    #include <cstdio> 
    
    int main(){ 
        int TC, n, ans; 
        
        while(scanf("%d", &TC) != EOF){
            for(int t = 0; t < TC; ++t ) {
                scanf("%d", &n); 
                /// 
                ans = 1; 
                for(int i=2; (long long)(i * i) <= 2*n; ++i){
                    if(2*n%i != 0){ continue; } 
    
                    if((2*n/i + 1 - i) % 2 == 0){
                        ans = i; 
                    }
                } 
                /// 
                printf("%d
    ", ans );
            }
        }
        
        return 0; 
    }
    
  • 相关阅读:
    java编程继承的第一原则
    Java基本语法总结
    java 语言实现的随机数生成算法
    java实现微公众平台自定义菜单
    使用Java调用谷歌搜索
    Java 语言实现的随机数生成算法
    浅谈Java中的instanceof关键字
    Java 编程基础 类和继承总结
    异常封装提高Java代码质量
    CSS-font
  • 原文地址:https://www.cnblogs.com/zhang-yd/p/7373574.html
Copyright © 2011-2022 走看看