zoukankan      html  css  js  c++  java
  • P1147连续自然数和

    洛谷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.
    
  • 相关阅读:
    1451. Rearrange Words in a Sentence
    1450. Number of Students Doing Homework at a Given Time
    1452. People Whose List of Favorite Companies Is Not a Subset of Another List
    1447. Simplified Fractions
    1446. Consecutive Characters
    1448. Count Good Nodes in Binary Tree
    709. To Lower Case
    211. Add and Search Word
    918. Maximum Sum Circular Subarray
    lua 时间戳和时间互转
  • 原文地址:https://www.cnblogs.com/Chuckqgz/p/4607814.html
Copyright © 2011-2022 走看看