【二分】Solve It

原创 2013年12月02日 21:01:11

Problem F

Solve It

Input: standard input

Output: standardoutput

Time Limit: 1 second

Memory Limit: 32 MB

Solve the equation:
        p*e-x+ q*sin(x) + r*cos(x) + s*tan(x)+ t*x2 + u = 0
        where 0 <= x <= 1.

Input

Input consists of multiple test cases and terminated by an EOF. Each testcase consists of 6 integers in a single line: p,q, r, s, tand u (where 0 <= p,r <= 20 and -20<= q,s,t<= 0). There will be maximum 2100 lines in the input file.

Output

For each set of input, there should be a line containing the value of x, correct upto 4 decimal places,or the string "No solution",whichever is applicable.

Sample Input

0 0 0 0 -2 1
1 0 0 0 -1 2
1 -1 1 -1 -1 1

Sample Output

0.7071
No solution
0.7554

Mustaq Ahmed


f(x)在[0,1]上单调递减。

所有有唯一解的充要条件是f(0)>0 且 f(1)<0。

利用单调性,可以用二分解决。


注意f的精度不能代替x的精度。而式子比较复杂,难以分析为了使x的精度达到要求f的精度要求。

我误以为f的精度可以代替x的精度,划分10^6个区间,时间复杂度是lg(n),10^6未免太抠门,不妨迭代100次,精度肯定能达到要求。


#include <cstdio>
#include <cmath>

const double eps = 1e-8;

int p,q,r,s,t,u;

double f(double x)
{
	return exp(-x)*p+sin(x)*q+cos(x)*r+tan(x)*s+x*x*t+u;
}


int main()
{
	while (scanf("%d%d%d%d%d%d",&p,&q,&r,&s,&t,&u)!=EOF)
	{
		if (f(0) < -eps || f(1) > eps)
		{
			printf("No solution\n");
			continue;
		}

		double l = 0;
		double r = 1;
		double ff;

		double x;
		for (int i=0;i<100;i++)
		{
			x = (l+r)/2.0;
			ff = f(x);
		//	printf("%lf %lf\n",x,ff);
			if (ff < -eps)
				r = x;
			else if (ff > eps)
				l = x;
			else
				break;
		}

		printf("%.4lf\n",x);
	}
	
	return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

UVA - 10341 - Solve It (二分求解)

思路:给你一个公式,求零点,从题目条件可以看出,此函数式是递减的,所以只要从两头往中间二分答案即可,注意精度问题,因为要精确到小数点后4位, 这里e的n次方可以用exp(n)表示,也可以用p...

UVA 10341 Solve It (解方程 二分查找+精度)

Solve It Input: standard input Output: standard output Time Limit: 1 second Memory Limit: 32 MB ...

uva10341Solve It(二分+精度问题)

uva 10341

UVA 10341 Solve It 解方程 二分查找+精度

题意:给出一个式子以及里面的常量,求出范围为[0,1]的解,精度要求为小数点后4为。 二分暴力查找即可。 e^(-n)可以用math.h里面的exp(-n)表示。 代码:(uva该题我老是出现S...
  • hcbbt
  • hcbbt
  • 2013-08-25 21:35
  • 1703

Polya How to solve it英文版

  • 2017-07-08 17:08
  • 14.94MB
  • 下载

How to Solve it, Modern Heuristics

  • 2008-09-15 14:31
  • 10.58MB
  • 下载

怎样解题 --解题表(how to solve it)

《怎样解题》 美.波利亚 下面是来自书中的解题表: 第一 理解题目 你必须理解题目 未知量是什么?已知数据是什么?条件是什么? 条件有可能满足吗?条件是否可以确定未适量?或者它不够充分?...

How To Solve It!怎样解题

人生会遇到各种各样的问题,人生的轨迹就是解决这些突如其来的问题。通过解决问题我们得到成长,所以如果你觉得生活中有各种各样的问题,也不该过分苦恼,人生像是一场游戏,如果没有一些任务,该是多么无聊呀。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)