W - A1 = ?

有如下方程:A i = (A i-1 + A i+1)/2 - C i (i = 1, 2, 3, .... n).
若给出A 0, A n+1, 和 C 1, C 2, .....C n.

请编程计算A 1 = ?

input

输入包括多个测试实例。
对于每个实例,首先是一个正整数n,(n <= 3000); 然后是2个数a 0, a n+1.接下来的n行每行有一个数ci(i = 1, ....n);输入以文件结束符结束。

output

对于每个测试实例,用一行输出所求得的a1(保留2位小数).

Sample input

1
50.00
25.00
10.00
2
50.00
25.00
10.00
20.00

Sample output

27.50
15.00

做题的思路:

首先,我们应该知道,我们现在知道的是A0和An+1,但是这道题奇怪的是,就如A1=(A0+A2)/2-C1这样子,我们总会有一个不知道的数字,我们想求解A2,却发现了A2=(A1+A3)/2-C2这样子的怪圈,不断的都会有新的未知数的参与,感觉我们要一直一直推推推推到整个式子的结束,才可以得到整个的答案。


我也有想过求什么特征方程。。。。。。但是我求不出来。。。。。。数学没学好。。。。。。我也不知道能不能求。。。。。。

于是我就顺着A1开始,推了一下



惊讶的发现!我可以整理出一条An+1的式子!


根据这个式子,我觉得编程来实现就是非常简单的一件事情了,比较困难的就是那个Ci求和的问题。

#include<iostream>
using namespace std;
int main()
{
	int n = 0;
	while (cin >> n)
	{
		double *a = new double[3];
		double *c = new double[n + 1];
		cin >> a[0] >> a[2];
		for (int i = 1; i <= n; ++i)
			cin >> c[i];
		if (n == 1)
		{
			a[1]=(a[0] + a[2]) / 2 - c[1];
			printf("%.2f", a[1]);
			cout << endl;
			continue;
		}
		else
		{
			double sum = 0;
			for (int i = 1; i <= n; ++i)
			{
				sum += 2 * (n + 1 - i)*c[i];
			}
			a[1] = (a[2] - sum + n*a[0]) / (n + 1);
			printf("%.2f", a[1]);
			cout << endl;
		}
		delete[]a;
		a = NULL;
		delete[]c;
		c = NULL;
	}
}


一看,是没有问题的,然后。。。。。提交了之后,就会出现一个大大的

要么超时,要么压线进
这可不允许啊!问题出现在哪了呢。。。。。。




原因出现在了



cin在不关闭同步的情况下会比scanf效率低
很多

当我把所有的cin在没有关闭同步的情况下,换成了scanf后之后,效率是。。。。。。


这是真的太夸张了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值