zoukankan      html  css  js  c++  java
  • #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

    等差数列求和,设起点n1 终点n2 经过推导可以求得(n1 + n2)*(n2 - n1 + 1) = 2*n

    n为输入的值。那么我们可以sqrt枚举2*n的约数。大的约数为n1+n2 小的为n2-n1+1

    #include <bits/stdc++.h>
    using namespace std;
    int main() {
        int n;
        int t;
        cin >>t;
        while (t--){
            cin>>n;
            int m = 2*n;
            int ans = 1;
            int n1, n2;
            for (int i = 2; i*i <= m; ++i) {
                if (m % i == 0){
                    int x = m / i;
                    int y = x + 1 - i;
                    if (y % 2 == 0) {
                        n1 = y / 2;
                        n2 = i + n1 - 1;
                        ans = max(ans, n2 - n1 + 1);
                    }
                }
            }
            cout <<ans <<endl;
        }
        return 0;
    }
  • 相关阅读:
    c++之类模板
    c++之函数模板
    c++之继承三
    c++之继承二
    c++之继承一
    c++之类类型转换
    c++之运算符重载二
    c++之运算符重载一
    Mahout学习路线路
    数据库分区
  • 原文地址:https://www.cnblogs.com/pk28/p/7259738.html
Copyright © 2011-2022 走看看