HihoCoder - 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

题目大意:

如题

分析

根据等差数列求和公式,首项为a,功差为1,项数为d,若要满足题意有:

即:

也就是说d一定可以整除2*n

那么从sqrt(2*n)向下开始枚举d

如果d可以整除2*n

那么就可以得到x,如果x为整数,那么d一定是一个可行的连续方案

又因为d从大到小枚举,所以第一个可行解即为答案

代码

 1 include<iostream>
 2 using namespace std;
 3 #include<cstdio>
 4 #include<cmath>
 5 void deal()
 6 {
 7     int n;
 8     cin>>n;
 9     int sum=0;
10     int ans;
11     for (int i=sqrt(2*n);i>=1;i--)
12     {
13         if (2*n%i==0)
14         {
15             //cout<<i<<" "<<(2*n/i-i+1)<<endl;
16             if ((2*n/i-i+1)%2!=0) continue;
17             ans=i;
18             break;
19         }
20     }
21     cout<<ans<<endl;
22 }
23 int main()
24 {
25     int t;
26     cin>>t;
27     for (int i=1;i<=t;i++)
28     {
29         deal();
30     }
31     return 0;
32 }
时间: 2024-07-28 15:28:15

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是

hihocoder 1543

http://hihocoder.com/problemset/problem/1543 题目很简单,最开始想了一下前缀和然后二分查找一下,发现二分很容易找不到答案 然后想起来了$s = \frac{(m+n)*(m-n+1))}{2}$公式,但是并没有想到怎么用, 然后看了一下别人的代码,我们可以枚举系数$(m-n+1)$,从$\sqrt{2*x}$开始枚举 然后如果这个系数是2*a的因子的话,那么看它的平均数是多少 计数个因子的平均数一定是偶数,偶数个因子的平均数一定是奇数 然后根据这个可以

hihocoder1543 SCI表示法

题意:任何一个数可以表示为连续整数相加,问这些连续整数的最大长度 题解:假设左右是l,r,那么(l+r)*(l-r+1)/2就是这段序列的和,枚举2n的所有因子,找到最大的就可以了 我的做法是预处理前缀和,二分找到答案位置然后暴力 .. #include <bits/stdc++.h> #define ll long long #define maxn 100100 using namespace std; ll a[maxn]; int main(){ ll T,n; cin>>

SCI论文从入门到精通

第一部分 经验谈 一.先想先写最后做 做研究之前,必须想清楚:结果能不能发表?发表在哪里? 先把文章大框写好,空出数据,等做完实验填完空就可以发了:正所谓心中有沟壑! 在未搞清“写什么.发哪里.自己研究与同类研究有何出色之处”之前,就不要动手做! 继续去看文献,去想:想不清楚就做还不如不做! 要想这样做,就得先看文献!要知道如何把文章架起来.要知道别人是如何讨论的.要知道自己的数据是不是说明了与别人不同的东东或别人没有做过……这个过程就是阅读文献及思考的过程,这些搞清楚了,写就简单了! 要是先做

SCI科技论文的写作技巧-核心价值

第一次写SCI论文的撰写技巧,本身不是大牛,也许没什么资格谈这个.在此仅是个人的一些思考,对不对,好不好,且当另论. 对于偏向应用的工科生来说,写SCI论文不是一件简单的事情.当然,也不是没可能.全在于如何提取.构思.组织你的论文.论文本身的学术价值当然少不了.但对一个问题,在有的人眼里,就是"这么简单,有什么可写的":而对于另外一些人,却能挖掘出背后的深度.广度.和细度,完成一篇较高价值的论文发表.至于学术价值方面,在次就不赘述.主要谈一下如何来构思SCI的论文,简单概括就是四个字:

HihoCoder第九周 状态压缩 二 与POJ2411总结

在此我向各位博友求助,特别想知道除了HihoCoder上面的结果要对1e9+7取余之外,这两道题还有什么其他的问题,都是骨牌覆盖问题,都是状态压缩+dp,为什么我能过poj2411的程序过不了HihoCoder,还不是其他诸如TimeLimited,而是Wrong Answer,这个问题我想了很久,还是不知道是怎么回事,如果有神通广大的博友知道答案,希望你能告诉我.顺便说一下,HihoCoder给的那个hint只看懂了一部分递推的公式,其中满足的那个条件还是不懂. 两个题目的连接地址: http

SCI论文编辑教你如何准备SCI论文和写作 [转]

该文最精辟的论点: 选题要小,开掘要深:不要题目很大,内容却很单薄. 题目很大的人实际是什么也懂点但什么也不真懂.做学问不合适,特别是青年学生不合适. 题目很小但把问题谈深入的人,是属于真做学问的类型.积少成多,才有希望成为真有本事的学霸. 转自:http://www.sciencenet.cn/bbs/showpost.aspx?id=57128 一.研究生必备四本 俗话说好记性不如烂笔头,所以一定要首先养成做笔记的好习惯!作为研究生下面这几个本子是必不可少的 1,实验记录本(包括试验准备本)

HihoCoder 1480:矩阵填数 (杨氏矩阵 || 钩子公式 + 筛逆元)

描述 小Hi在玩一个游戏,他需要把1, 2, 3, ... NM填入一个N行M列的矩阵中,使得矩阵每一行从左到右.每一列从上到下都是递增的. 例如如下是3x3的一种填法: 136 247 589 给定N和M,小Hi希望知道一共有多少种不同的填法. 输入 一行包含两个整数N和M. 对于60%的数据 1 <= N <= 2, 1 <= M <= 100000 对于20%的数据 N = 3, 1 <= M <= 100 对于100%的数据 1 <= N <= 3,

hihocoder编程练习赛73 A 地铁站

1 /* 2 Source :hihocoder编程练习73 3 Problem :一个长度为n的串,由若干段1-a[i](假设有Y段)的序列组成,现在中间缺了K个数,问能够还原出来的方案数,需要保证还原出来的子串的个数最少,即最小Y 4 Solution :1.通过分析剩余的序列,我们可以知道原来最少的时候Y是多少,即看原来的序列有多少单调递增的子段. 5 2.进行有解的判断,假设已知序列段中每段的最大值是b[i] i=1..Y,如果sum(b[i]) > N,则说明无解,这是序列的长度一定已