151 条题解

  • 0
    @ 2009-07-10 22:22:14

    program p1302;

    var

    m,i,j,k,t,sum:longint;

    a:array [1..10000,1..2] of longint;

    begin

    read(m);

    k:=2*m;

    t:=0;

    for i:=1 to (m div 2) do

    begin

    for j:=2 to (m div 2) do

    begin

    sum:=2*i*j+j*(j-1);

    if sum=k then begin

    inc(t);

    a[t,1]:=i;

    a[t,2]:=i+j-1;

    break end

    else if sum>k then break;

    end;

    end;

    for i:=1 to t do

    begin

    write(a,' ',a);

    writeln;

    end;

    end.

    恩,等差数列,2*a1*n+n(n-1)=2*m;

    感觉还可以再优化,当数字很大时,应该可以j div 10;不过,只是感觉,还没证明。

  • 0
    @ 2009-07-09 15:23:01

    不优化有可能会超时.

  • 0
    @ 2009-06-07 00:43:01

    var n:extended;

    a1,m:int64;

    begin

    {N+};

    readln(m);

    a1:=0;

    repeat

    begin

    a1:=a1+1;

    n:=(1-2*a1+sqrt((2*a1+1)*(2*a1+1)+8*m))/2;

    if (n-trunc(n)=0) then begin

    write(a1+1,' ',a1+trunc(n)-1);

    writeln

    end;

    end;

    until a1=trunc((m-1)/2);

    end.

  • 0
    @ 2009-04-07 20:26:19

    program p1302;

    var

    n,i,j:longint;

    begin

    readln(n);

    for i:=1 to n shr 1 do

      begin

       for j:=i+1 to n do

        begin

         if (i+j)*(j-i+1)=n*2

          then begin

             writeln(i,' ',j);

             break;

             end

          else if (i+j)*(j-i+1)>n*2

             then break;

        end;

      end;

    end.

  • 0
    @ 2009-03-08 10:00:51

    数学题……高斯定律……

    (l+r)*(r-l+1)=2*m

    枚举(r-l+1)即可

    令x-1=r-l

    y=r+l

    模拟方程组求解的过程就可以了……

    {————————————————————————————}

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    var m,i,x,y,l,r,n:longint;

    begin

    read(m);

    n:=m*2;

    for i:=round(sqrt(n)) downto 2 do

    if n mod i=0 then

    begin

    x:=i-1;

    y:=n div i;

    if (x>0) and (y>0) then

    begin

    r:=(x+y) div 2;

    l:=(y-x) div 2;

    if (l+r)*(r-l+1)=2*m then writeln(l,' ',r);

    end;

    end;

    end.

    Flag

       Accepted

    题号

      P1302

    类型(?)

      数论 / 数值

    通过

      2431人

    提交

      4768次

    通过率

      51%

    难度

      1

    提交 讨论 题解

  • 0
    @ 2009-03-03 16:57:41

    program lianxuzhiranshuhe;

    var m,i,j,k:longint;

    begin

    readln(m);

    k:= trunc(m /2)+1;

    for i:=1 to k do

    for j:=i+1 to k+1 do

    if (i+j)*(j-i+1)=m*2 then begin

    writeln(i,' ',j);

    break;

    end

    else if (i+j)*(j-i+1)>m*2 then break;

    end.

    直接枚举......AC....还0秒......

  • 0
    @ 2009-02-19 12:45:11

    #include

    int main (){

    int m;

    scanf ("%d",&m);

    int i,j,s,t;

    for (i=1;i

  • 0
    @ 2008-12-21 19:35:47

    program P1302(input,output);

    var

    l,r:real;

    i:longint;

    j,m,t:int64;

    begin

    readln(m);

    m:=m*2;

    t:=trunc(sqrt(m));

    for i:=t downto 2 do

    if m mod i=0 then

    begin

    j:=m div i;

    r:=(i+j-1)/2;

    l:=j-r;

    if r=trunc(r) then

    writeln(l:0:0,' ',r:0:0);

    end;

    end.

    水题...时间复杂度不高啊...

  • 0
    @ 2008-12-20 18:42:43

    记录号 Flag 得分 记录信息 环境 评测机 程序提交时间

    R1101025 Accepted 100 From zgx-

      P1302 FPC Vivid Puppy 2008-12-20 18:39:45

    From cqwshll

    连续自然数和

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    强搜,十六行秒杀。

    而且全零秒^_^

  • 0
    @ 2008-12-11 13:34:52

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    program p1302;

    var

    n,i,j:longint;

    begin

    readln(n);

    for i:=1 to n shr 1 do

    begin

    for j:=i+1 to n do

    begin

    if (i+j)*(j-i+1)=n*2

    then begin

    writeln(i,' ',j);

    break;

    end

    else if (i+j)*(j-i+1)>n*2

    then break;

    end;

    end;

    end.

  • 0
    @ 2008-12-03 21:43:08

    Accepted 有效得分:100 有效耗时:0ms

    我也不知道复杂度是几……感觉很慢,但编译时2000000貌似可以在1秒内……

    program p1302;

    var

    i,j,n:longint;

    begin

    readln(n);

    for i:=1 to n shr 1 do

    begin

    for j:=i+1 to n do

    if (i+j)*(j-i+1)=2*n then

    begin

    writeln(i,' ',j);

    break;

    end else

    if (i+j)*(j-i+1)>2*n then break;

    end;

    end.

  • 0
    @ 2008-11-11 10:26:50

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

  • 0
    @ 2008-11-10 15:48:22

    时间复杂度为log2(N),最好的答案

    #include

    main()

    {

    long sum,n=0;

    scanf("%ld",∑);

    while((1+n*n)/2=2;n--)

    {

    if((2*sum-n*n-n)%(2*n)==0)printf("%d %d\n\n",(2*sum+1-n*n)/(2*n)+1,((2*sum+1-n*n)/(2*n))+n);

    }

    }

  • 0
    @ 2008-11-04 08:01:03

    #include

    long m;

    int main()

    {

    long a,b,up,here;

    scanf("%ld",&m);

    up=m/2;

    for(a=1;a

  • 0
    @ 2008-11-03 23:29:39

    var n:longint;

    a,b: integer;

    k,j,o:longint;

    begin

    readln(n);

    for a:=1 to round(n/2) do

    for b:=a to round(n/2) do

    begin

    if (a+b)/2*(b-a+1)=n then

    writeln(a,' ',b);

    end;

    end.

    就是有点慢

  • 0
    @ 2008-11-02 14:55:01

    for (i=1;i

  • 0
    @ 2008-10-31 19:58:23

    Program P1302;

    Var M,i,p:longint;k:real;

    Ans1:array [1..100000] of longint;

    Ans2:array [1..100000] of longint;

    begin

    readln(m);

    p:=0;

    for i:=2 to m do begin

    k:=(m-(i*(i-1))/2)/i;

    if k

  • 0
    @ 2008-10-29 09:10:11

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    公差为1的等差数列~

  • 0
    @ 2008-10-20 20:47:29

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2008-10-18 01:50:21

    枚举可以过????我只有60分~~~~

    后来换贪心~~~AC~~~~

    #include

    #include

    #include

    int main(int argc, char *argv[])

    {

    long long M;

    long long i,j;

    long long temp1,temp3;

    double temp2;

    static long long record[10000][4];

    long long re=0;

    scanf("%I64d",&M);

    for(i=0;i

信息

ID
1302
难度
3
分类
数论 | 数位统计 点击显示
标签
(无)
递交数
2539
已通过
1289
通过率
51%
被复制
3
上传者