P1147连续自然数和
2024-08-26 23:12:27
洛谷1147 连续自然数和
题目描述
对一个给定的自然数M,求出所有的连续的自然数段,这些连续的自然数段中的全部数之和为M。
例子:1998+1999+2000+2001+2002 = 10000,所以从1998到2002的一个自然数段为M=10000的一个解。
输入输出格式
输入格式:
包含一个整数的单独一行给出M的值(10 <= M <= 2,000,000)。
输出格式:
每行两个自然数,给出一个满足条件的连续自然数段中的第一个数和最后一个数,两数之间用一个空格隔开,所有输出行的第一个按从小到大的升序排列,对于给定的输入数据,保证至少有一个解。
输入输出样例
输入样例1:
combo.in
10000
输出样例1:
combo.out
18 142
297 328
388 412
1998 2002
洛谷1147
在学校机房写的
把在学校的思路写下
首先,第一个想的是枚举,但是明显会TLE,于是我先列了下
ANS=i+i+1+i+2+...+i+j
=ij+1+2+...+j
然后把1+..+j存储到数组f[j]中,那么就可以得到:
ANS=ij+A[j]
这个应该是哈希表吧?
于是得到程序
program p1147;
type
LL=longint;
var
j,n,i:LL;
f:array[0..2020]of LL;
procedure init;
var
i:LL;
begin
f[0]:=0;
for i:=1 to 2000 do f[i]:=f[i-1]+i;
end;
begin
assign(input,'p1147.in');
assign(output,'p1147.out');
reset(input);
rewrite(output);
readln(n);
init;
for i:=1 to n div 2 do
begin
j:=round(n/i);
if j>2000 then j:=2000;
while j>0 do
begin
if f[j-1]+j*i=n
then begin
if i=1 then begin
writeln(0,' ',i+j-1);
writeln(1,' ',i+j-1);
end
else writeln(i,' ',i+j-1);
break;
end;
dec(j);
end;
end;
close(input);
close(output);
end.
最新文章
- 在OS X中使用Homebrew
- Web:AJAX的网络请求
- [WinForm]平均切割图片AvgCutImage
- API指南----application
- some smart
- java10 WeakHashMap
- Java调用R——rJava的安装和配置
- Python初探
- 2013 ACM/ICPC Asia Regional Hangzhou Online hdu4739 Zhuge Liang&#39;s Mines
- 【linux之进程管理,系统监控】
- matplotlib图例-【老鱼学matplotlib】
- Zephyr学习(五)线程和调度
- 4.HTML+CSS制作个月亮
- 第四届CCF软件能力认证
- 媒体文件audio 转 base64 编码 (利用 FileReader &; Audio 对象)
- 《转》win7 安装ujson 出现的“error: Microsoft Visual C++ 9.0 is required. Get it from http://aka.ms/vcpython27”
- java中Scanner类nextInt之后用nextLine无法读取输入
- Ushare共享流媒体
- [c# 20问] 1. 何时使用class与struct
- MySQL 8.0复制性能的提升(翻译)
热门文章
- PHP上传大文件 分割文件上传
- Windows下运行python脚本报错“ImportError: No Module named ...”的解决方法
- (String)将一个String里面的单词反转
- NSIS打包(一)常用概念简介
- 11. Evaluate Reverse Polish Notation
- iOS开发编译报错、常见问题(实时更新)
- android 程序开机自启动
- oracle分配权限:一个用户访问另一个用户的表
- apache相关
- c++学习笔记——字面值常量类