39 条题解
-
18128*8128 LV 10 @ 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. -
12016-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;
} -
02016-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. -
02015-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;
} -
02015-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 beginread(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. -
02015-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. -
02014-08-08 17:03:00@
递推构造下第n项关于a1,a2,d的系数,O(n)过
-
02014-06-20 18:08:23@
哪位好人能发一下代码?最好是C的
表示不会做 -
02013-12-08 21:10:29@
算法
- 高斯消元
- 需要自己构造方程
注意
- 当你的输出与输入样例对不到时别急,**输出样例不对**,(让我纠结了n久。最后直接放弃反倒全AC)
- 还有注意当m<1或者m>n是直接输出0.000 代码就不发了
-
02013-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 -
02012-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
-
02009-11-09 14:02:29@
列出每个点关于a2的关系式即可。
-
02009-09-12 09:54:42@
n-1个方程n-1个未知数高斯消元即可。后五点要加一句if m=0 then……
-
02009-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爆发,哈哈...... -
02009-07-08 09:50:36@
正如norsonerror,NarcissuRD所说,我再加一句,后五个数据m=0(至少现在是)
-
02009-07-02 09:55:32@
一定要用extended...不然后5个点过不去......
-
02009-04-07 18:12:47@
p,q,r数组解法好厉害。。。
-
02008-10-23 08:50:59@
1~5组是一样的
6~10组是一样的...
一共就2组 -
02008-10-14 21:30:49@
同一个程序在Lora Temper 一次90,1各点T了
再交就AC了
第二次碰到这种情况了,对Lora Temper无语了 -
02008-08-31 15:25:58@
大家听说过“第0个人”吗?!谁能解释一下后五个点m会是0?
我交了10遍都有了!!