【二分】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 解方程 二分查找+精度

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

uva10341Solve It(二分+精度问题)

uva 10341

Solve It(数论,二分迭代求值)

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

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

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

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

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

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》

第一部分 在教室中 第一:必须清楚的看到要求的是什么?了解各个项之间有怎样的联系?未知数和数据之间有什么关系? 问题的主要部分:未知数,已知数,条件 已知数比如长方体的长宽高,未知数...
  • cumtwyc
  • cumtwyc
  • 2014年11月21日 17:46
  • 680

how to solve it

  • 2014年04月03日 15:36
  • 4.79MB
  • 下载

How to solve it Modern Huristics 2nd edition

  • 2013年09月15日 22:02
  • 28.84MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【二分】Solve It
举报原因:
原因补充:

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