POJ 1844 Sum【简单数学】
链接:
Time Limit: 1000MS | Memory Limit: 30000K | |
Total Submissions: 9795 | Accepted: 6406 |
Description
For a given S, find out the minimum value N in order to obtain S according to the conditions of the problem.
Input
Output
Sample Input
12
Sample Output
7
Hint
Source
思路:
算是很简单的数学题目了,但是昨天晚上就算几乎是推出了规律,居然都没有折腾出来太弱了。
然后完赛后在群里和 TeilWall 吐槽了下,就差泪奔了。。。
正解思路:
先定义 sum(i) = 1+2+...+i = (i+1)*i/2 【小学数学。。。(首项+末项)*项数/2 了解Orz】
可想而知 sum(i) 是 i 能确定的最大的数。
1.对于每一个输入的数 S ,我们找符合条件的 i 肯定是可以从 sum(i) >= S 开始枚举 i 的。
分析:如果连 sum(i) < S 那么 i 肯定是不符合条件的了。
PS:昨晚我在草稿纸上是逆推的,结果搞的很复杂,也没有注意到从 sum(i) >= S 这里开始枚举。。。
2. 当我们由第一步确定了 i 后有两种情况:
(1)Sum(i) == S ,那么很明显 i 就是答案,直接输出即可。
(2)Sum(i) > S , 从 i 开始,依次往后面 +1 枚举 ,只要遇到 (Sum(i) - S) % 2 == 0 输出答案就可以了。
其实 0%2 == 0 所以第一类情况实际上是可以归类于第二种情况的了。
分析:
情况一已经很明显了,下面主要分析情况二。。。
对于每一个 i 能够确定的数:
很明显最大的是 Sum(i) ,
然后再把序列 1,2,3,...i 中的 + 依次改成 - 那么能确定的下一个数一定比前一个数小二
比如说 i = 3, 那么能够确定的数是 6 ,4 ,2 ,(1)
i = 4, 能确定的数是 10, 8, (6)
i = 5, 能确定的数是 15,13,11,9,7,5, (3)
这里有一个问题:如何确定能确定的最后一个数在哪里截止, 如果减到后面遇的数已经被前面的数确定过,那么就不用往后
面减了,由于前面已经提到了,我们是从前面往后面枚举的 i 所以就不用考虑到哪里截止的问题了。
那么从这里可以看出:
对于一个数 i 它能确定的最大的数是 Sum(i),
如果对于当前的 i 它能够确定当前的 S ,那么 Sum(i)-S 一定是二的倍数。【(Sum(i)-S) % 2 == 0】
因为我们是从最小的可能满足条件的 i 开始枚举的,所以不会出现前面的 i 满足条件而小于当前的 i 的情况。
也就是说一旦遇到了 (Sum(i)-S)%2 == 0 输出 i 就可以了。
我比赛时的想法分析:
当时我已经在草稿纸上画出了下面的东东了。。。
但是我居然是逆推的,同时没想过枚举。。。而且这么明显的结论也没有看出来,然后我就推出了下面的复杂而傻逼的公式。。。
如果结尾的数 N 是偶数:
那么 N 可以确定的数是从 (1+N)*N/2 开始 依次减二 直到大于 (1+ N-1)*(N-1)/2 为止
如果结尾的数 N 是奇数:
那么 N 可以确定的数是从 (1+N)*N/2 开始 依次减二 知道大于 (1+ N-2)*(N-2)/2 为止
。。。。
然后实在是无法逆推出直接的公式了,也想到过枚举,但是开始没想到枚举的区间从哪里开始
然后看做这题无望,时间已经过去了大半,就果断去写了前面简单的贪心。。。一直自认为关于找规律还是很在行的了,结果还是坑在了这题上。
code:
#include<stdio.h> const int maxn = 100000; int main()
{
int s;
while(scanf("%d", &s) != EOF)
{
int sum = 0;
int i;
for(i = 1; i < maxn; i++) //先找到和 <= 自己的最小的数
{
sum = (1+i)*i/2;
if(sum >= s) break;
}
int index = i; //记录 for(;;)
{
sum = (1+index)*index/2;
if((sum-s)%2 == 0) //往后面找, 只要找到就输出
{
printf("%d\n", index);
break;
}
index++;
}
}
return 0;
}
POJ 1844 Sum【简单数学】的更多相关文章
- OpenJudge/Poj 1844 Sum
1.链接地址: http://bailian.openjudge.cn/practice/1844 http://poj.org/problem?id=1844 2.题目: Sum Time Limi ...
- POJ 1844 Sum
题意:给一个整数n,求当n由1到k的连续整数加或减组成时的最小的k. 解法:一开始觉得dp……后来觉得复杂度太大了……GG……百度了一下是个数学题orz. 如果n全部由加法组成,那么k可以组成k(k+ ...
- ACM:POJ 2739 Sum of Consecutive Prime Numbers-素数打表-尺取法
POJ 2739 Sum of Consecutive Prime Numbers Time Limit:1000MS Memory Limit:65536KB 64bit IO Fo ...
- HDU 5073 Galaxy (2014 Anshan D简单数学)
HDU 5073 Galaxy (2014 Anshan D简单数学) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5073 Description G ...
- 洛谷试炼场-简单数学问题-P1403 [AHOI2005]-因数
洛谷试炼场-简单数学问题 P1403 [AHOI2005]约数研究 Description 科学家们在Samuel星球上的探险得到了丰富的能源储备,这使得空间站中大型计算机"Samuel I ...
- 洛谷试炼场-简单数学问题-P1045 麦森数-高精度快速幂
洛谷试炼场-简单数学问题 B--P1045 麦森数 Description 形如2^P−1的素数称为麦森数,这时P一定也是个素数.但反过来不一定,即如果PP是个素数,2^P-1 不一定也是素数.到19 ...
- 洛谷试炼场-简单数学问题-P1088 火星人
洛谷试炼场-简单数学问题 A--P1088 火星人 Description 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法 ...
- POJ.2739 Sum of Consecutive Prime Numbers(水)
POJ.2739 Sum of Consecutive Prime Numbers(水) 代码总览 #include <cstdio> #include <cstring> # ...
- POJ 2739 Sum of Consecutive Prime Numbers(素数)
POJ 2739 Sum of Consecutive Prime Numbers(素数) http://poj.org/problem? id=2739 题意: 给你一个10000以内的自然数X.然 ...
随机推荐
- SQL快速入门 ( MySQL快速入门, MySQL参考, MySQL快速回顾 )
SQL 先说点废话,很久没发文了,整理了下自己当时入门 SQL 的笔记,无论用于入门,回顾,参考查询,应该都是有一定价值的,可以按照目录各取所需.SQL数据库有很多,MySQL是一种,本文基本都是SQ ...
- BotBuilder Nodejs示例查看
关于Bot Framework知识,可以参考<Nodejs Bot学习> 本文是根据bot framework官方示例<https://github.com/Microsoft/Bo ...
- .net反射详解 原文://http://blog.csdn.net/wenyan07/article/details/27882363
概述反射 通过反射可以提供类型信息,从而使得我们开发人员在运行时能够利用这些信息构造和使用对象. 反射机制允许程序在执行过程中动态地添加各种功能. 运行时类型标识 运行时类型标识(RTTI),可以在程 ...
- POJ 1985.Cow Marathon-树的直径-树的直径模板(BFS、DFS(vector存图)、DFS(前向星存图))
Cow Marathon Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 7536 Accepted: 3559 Case ...
- 运行hadoop的时候提示物理内存或虚拟内存溢出的解决方案running beyond physical memory或者beyond vitual memory limits
当运行中出现Container is running beyond physical memory这个问题出现主要是因为物理内存不足导致的,在执行mapreduce的时候,每个map和reduce都有 ...
- 洛谷——P1748 H数
P1748 H数 题目背景 无 题目描述 所谓H数,是指只含有2,3,5,7这些质因数的数,如630是H数,而22不是.现在要求输出第n个H数,为了方便起见将H[1]定为1.已知n不超过10000,最 ...
- Codeforces Beta Round #14 (Div. 2) Two Paths (树形DP)
Two Paths time limit per test 2 seconds memory limit per test 64 megabytes input standard input outp ...
- 【jzyzoj】【p1320 patrol】 巡逻(网络流最小割例题)
描述 Description FJ有个农场,其中有n块土地,由m条边连起来.FJ的养牛场在土地1,在土地n有个新开张的雪糕店.Bessie经常偷偷溜到雪糕店,当Bessie去的时候,FJ就要跟上她.但 ...
- [2018湖南省队集训] 6.28 T3 simulate
这道模拟题出的我毫无脾气2333 最重要的是先要发现操作顺序不影响最后的答案,也就是每次随便挑一个>=2的数进行操作最后总是可以得到同样的数列. (这个还不太难想qwq) 但是最骚的是接下来的模 ...
- 【树形dp】Find Metal Mineral
[HDU4003]Find Metal Mineral Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65768/65768 K (J ...