39 条题解

  • 1
    @ 2017-02-13 20:40:23

    var
    a:array [0..65,1..3] of extended;
    i,n,m:longint;
    x,y,d,z:extended;
    begin
    read(n,m);
    read(d,x,y);
    a[1,1]:=1; a[2,2]:=1;
    for i:=3 to n do
    begin
    a[i,1]:=a[i-1,2];
    a[i,2]:=-2*a[i-1,2]+a[i-2,2];
    a[i,3]:=-2*(a[i-1,3]-1)+a[i-2,3];
    end;
    z:=(y-a[n,1]*x-a[n,3]*d)/a[n,2];
    write((a[m,1]*x+a[m,2]*z+a[m,3]*d):0:3);
    end.

  • 1
    @ 2016-05-31 00:25:20

    ps:这道题目的样例输出有问题,抱着试一试的态度竟然AC了,由于这道题只提供数列的第一项和最后一项,但是由递推公式可以建立一个这样的方程。 即a[m] = A*a[n] + B*a[n-1] + C*d。
    于是可以建立系数矩阵,然后从上到下依次递推求A,B,C。

    另外评论区有人说其实这道题的标准解法是高斯消元法。。。。 哎,还得学更高级的算法啊,加油!!
    另外竟然还有人用特征方程。。。。 这精度竟然也能过。。。。

    include <stdio.h>

    int a[65][3];

    int main (void)
    {

    int n, m, i;
    double d, first, last, t;
    scanf("%d%d%lf%lf%lf",&n,&m,&d,&first,&last);
    if (n <= 2) {
    printf("%.3lf\n", m==1 ? first : last);
    }
    a[n][0] = 1;
    a[n-1][1] = 1;
    for (i=n-2; i>=1; i--) {
    a[i][0] = a[i+2][0] + 2*a[i+1][0];
    a[i][1] = a[i+2][1] + 2*a[i+1][1];
    a[i][2] = a[i+2][2] + 2*a[i+1][2] - 2;
    }
    t = (first - a[1][0]*last - a[1][2]*d) / a[1][1];
    printf("%.3lf\n",a[m][0]*last + a[m][1]*t + a[m][2]*d);
    return 0;
    }

  • 0
    @ 2016-04-04 12:01:31

    var
    a:array [0..65,1..3] of extended;
    i,n,m:longint;
    x,y,d,z:extended;
    begin
    read(n,m);
    read(d,x,y);
    a[1,1]:=1; a[2,2]:=1;
    for i:=3 to n do
    begin
    a[i,1]:=a[i-1,2];
    a[i,2]:=-2*a[i-1,2]+a[i-2,2];
    a[i,3]:=-2*(a[i-1,3]-1)+a[i-2,3];
    end;
    z:=(y-a[n,1]*x-a[n,3]*d)/a[n,2];
    write((a[m,1]*x+a[m,2]*z+a[m,3]*d):0:3);
    end.

  • 0
    @ 2015-08-20 16:51:27

    偶然发现把系数x、y、z改成int后得到了样例答案,提交上去依然AC了。
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    a[i]=2a[i-1]+a[i-2]+2d
    a[i+1]=……推出公式
    a[n]=x[n]a[1]+y[n]a[2]+z[n]d. 据此递推出系数x[n],y[n],z[n].①
    根据①求出a[2],再递推a[m] ②

    #include<stdio.h>
    int n,m;
    double a[61],d;
    __int64 x[61],y[61],z[61];
    int main(void)
    {
    int i;
    scanf("%d%d",&n,&m);
    scanf("%lf%lf%lf",&d,&a[1],&a[n]);
    x[3]=1;y[3]=-2;z[3]=2;
    x[4]=-2;y[4]=5;z[4]=-2;
    for(i=5;i<=n;i++)
    {
    x[i]=x[i-2]-2*x[i-1];
    y[i]=y[i-2]-2*y[i-1];
    z[i]=z[i-2]-2*z[i-1]+2;
    }
    a[2]=(a[n]-x[n]*a[1]-z[n]*d)/y[n];
    for(i=3;i<=m;i++)
    a[i]=a[i-2]-2*a[i-1]+2*d;
    printf("%.3lf",a[m]);
    return 0;
    }

  • 0
    @ 2015-03-02 11:03:06

    program leicheng;
    var
    w,jj,ii,k,i,j,m,n:longint;

    aa,c,a:array[1..3,1..3] of real;
    b:array[0..80]of real;
    c1,c2,c3,s,nn,d:real;

    procedure main;
    var i,j,k:longint;
    begin
    for i:=1 to 3 do
    for j:=1 to 3 do
    begin
    c[i,j]:=0;
    for k:=1 to 3 do
    c[i,j]:=c[i,j]+a[i,k]*aa[k,j];

    end;

    end;

    begin
    a[1,1]:=1;
    a[1,2]:=0;
    a[1,3]:=0;
    a[2,1]:=0;
    a[2,2]:=1;
    a[2,3]:=0;
    a[3,1]:=0;
    a[3,2]:=0;
    a[3,3]:=1;
    aa[1,1]:=-2;
    aa[1,2]:=1;
    aa[1,3]:=1;
    aa[2,1]:=1;
    aa[2,2]:=0;
    aa[2,3]:=0;
    aa[3,1]:=0;
    aa[3,2]:=0;
    aa[3,3]:=1;
    read(n,m);
    if m=0 then writeln('0.000') else begin

    read(d,b[1],b[n]);

    for i:=3 to n do
    begin
    main;
    if i=m then
    begin
    c1:=c[1,1];
    c2:=c[1,2];
    c3:=c[1,3];
    end;

    for ii:=1 to 3 do
    for jj:=1 to 3 do
    a[ii,jj]:=c[ii,jj];
    end;
    b[2]:=(b[n]-c[1,2]*b[1]-c[1,3]*2*d)/c[1,1];
    b[m]:=b[2]*c1+b[1]*c2+2*d*c3;

    writeln(b[m]:8:3);
    end;
    end.

  • 0
    @ 2015-03-01 16:47:02

    var
    a:array[1..60]of real;
    m,ii,n,i,j:longint;
    s,q1,q2,q3,d:real;
    v3,v2,v:array[1..3,1..3]of real;
    procedure che;
    var
    i,j,k:integer;
    begin
    for i:=1 to 3 do
    for j:=1 to 3 do
    begin
    s:=0;
    for k:=1 to 3 do
    s:=s+v2[i,k]*v[k,j];
    v3[i,j]:=s;
    end;
    end;
    begin
    read(n,m);
    read(d,a[1],a[n]);
    v[1,1]:=-2;v2[1,1]:=1;
    v[1,2]:=1;v2[2,2]:=1;
    v[1,3]:=1;
    v[2,1]:=1;
    v[3,3]:=1;v2[3,3]:=1;
    for i:=3 to n do
    begin
    che;
    if i=m then
    begin
    q1:=v3[1,1];q2:=v3[1,2];q3:=v3[1,3];
    end;
    for ii:=1 to 3 do
    for j:=1 to 3 do
    v2[ii,j]:=v3[ii,j];
    end;
    a[2]:=(a[n]-v3[1,3]*2*d-v3[1,2]*a[1])/ v3[1,1];
    a[m]:=q1*a[2]+q2*a[1]+q3*2*d;
    writeln(a[m]:8:3);
    end.

  • 0
    @ 2014-08-08 17:03:00

    递推构造下第n项关于a1,a2,d的系数,O(n)过

  • 0
    @ 2014-06-20 18:08:23

    哪位好人能发一下代码?最好是C的
    表示不会做

  • 0
    @ 2013-12-08 21:10:29

    算法

    • 高斯消元
    • 需要自己构造方程

    注意

    • 当你的输出与输入样例对不到时别急,**输出样例不对**,(让我纠结了n久。最后直接放弃反倒全AC)
    • 还有注意当m<1或者m>n是直接输出0.000 代码就不发了
  • 0
    @ 2013-10-26 09:34:42

    我只想说,这个题前五个点的数据一样,后五个点的数据一样。。。忍不了啊。。
    测试数据 #0: Accepted, time = 0 ms, mem = 824 KiB, score = 10
    测试数据 #1: Accepted, time = 0 ms, mem = 824 KiB, score = 10
    测试数据 #2: Accepted, time = 0 ms, mem = 824 KiB, score = 10
    测试数据 #3: Accepted, time = 0 ms, mem = 828 KiB, score = 10
    测试数据 #4: Accepted, time = 0 ms, mem = 824 KiB, score = 10
    测试数据 #5: Accepted, time = 0 ms, mem = 824 KiB, score = 10
    测试数据 #6: Accepted, time = 0 ms, mem = 820 KiB, score = 10
    测试数据 #7: Accepted, time = 0 ms, mem = 820 KiB, score = 10
    测试数据 #8: Accepted, time = 0 ms, mem = 820 KiB, score = 10
    测试数据 #9: Accepted, time = 0 ms, mem = 820 KiB, score = 10

  • 0
    @ 2012-10-23 19:59:35

    暴力搞法:

    设a[i]=k[i] * a + b[i]

    k[2]=-0.5 b[2]=0.5*a[1]+d

    之后从3到n-1循环

    k[i]=1/(k-2) b[i]=(-b-2*d)/(k-2)

    然后再从n-1倒回2即可

    a[i]=a*k[i]+b[i]

    不用注意精度,要用extended,注意判-0.0

  • 0
    @ 2009-11-09 14:02:29

    列出每个点关于a2的关系式即可。

  • 0
    @ 2009-09-12 09:54:42

    n-1个方程n-1个未知数高斯消元即可。后五点要加一句if m=0 then……

  • 0
    @ 2009-07-10 16:45:35

    特征根方程得到:

    A2=(2*√2*An-2*√2*d-((√2-1)^(n-1)*(1+√2)-(-1-√2)^(n-1)*(1-√2))*A1-((√2-1)^(n-1)*(-√2-2)-(-1-√2)^(n-1)*(√2-2))*d)/((√2-1)^(n-1)-(-1-√2)^(n-1))

    完全不管精度问题,这样都能过,rp爆发,哈哈......

  • 0
    @ 2009-07-08 09:50:36

    正如norsonerror,NarcissuRD所说,我再加一句,后五个数据m=0(至少现在是)

  • 0
    @ 2009-07-02 09:55:32

    一定要用extended...不然后5个点过不去......

  • 0
    @ 2009-04-07 18:12:47

    p,q,r数组解法好厉害。。。

  • 0
    @ 2008-10-23 08:50:59

    1~5组是一样的

    6~10组是一样的...

    一共就2组

  • 0
    @ 2008-10-14 21:30:49

    同一个程序在Lora Temper 一次90,1各点T了

    再交就AC了

    第二次碰到这种情况了,对Lora Temper无语了

  • 0
    @ 2008-08-31 15:25:58

    大家听说过“第0个人”吗?!谁能解释一下后五个点m会是0?

    我交了10遍都有了!!

信息

ID
1151
难度
6
分类
其他 | 数学递推 点击显示
标签
(无)
递交数
777
已通过
219
通过率
28%
被复制
6
上传者