2012年东莞市GDOI市选题第一题---…

博客内容介绍了如何求解将一个正整数表示为连续正整数之和的最短数列长度。针对不同情况,如奇数和偶数,提出了利用数列对称性和奇偶性进行分析的解题方法。文章还提到在实际考试中可能难以想到如此复杂的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题:数列

提交文件:sequence.pas/c/cpp

输入文件:sequence.in

输出文件:sequence.out

问题描述:

把一个正整数分成一列连续的正整数之和。这个数列必须包含至少两个正整数。你需要求出这个数列的最小长度。如果这个数列不存在则输出-1。

输入格式:

每行包含一个正整数n。

每个文件包含多行,读入直到文件结束。

输出格式:

对于每个n,输出一行,为这个数列的最小长度。

 

输入样例:

输出样例:

9

2

2

-1

数据范围:

对于所有数据,n≤263

 

 

解题报告:

列举数据进行分析可以发现连续等差数列具有单调递增对称性,数列可以表示为ai...a2a1xb1b2...bi,其中x为数列的对称点,x可以是一个数,它的值为x=(a1+b1)/2,如果x不是一个数,那么b1-a1=1,同时有a1+b1=a2+b2=...=ai+bi,进一步分析可以发现数据本身可根据奇偶性进行分解:当n为奇数时,解为2;当n为偶数时则进行因子分解,求出最小的奇数因子,该最小奇数因子即为问题解,但是也有特殊情况,例如0,1,2,3,4数列它的长度为5,而实际长度是4,所以对奇数序列如果出现数列延伸到0和负数范围时就需要进行调整。

在上面的分析基础上,利用数列的对称性,特殊处理n为奇数和n=1的情况,对n为偶数直接枚举数列长度,对数列长度本身也具有奇偶性,遇到奇数序列长度则判断:n是否能 整除数列长度 如果是则为解;遇到偶数序列长度则判断:n整除数列长度的余数是否为序列长度的一半,如果是则为解。

 

好复杂。考试时绝对想不到。

本想骗几分的,竟每组数据都有一个值“11393000946249

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值