CF621D - Rat Kwesh and Cheese

题目大意:给三个实数x,y,z。求出最大的a[i],输出i对应的字符串。

一开始想用pow水。。。结果数据太大了。。。这个题可以变成把式子取对数套两层ln,然后就没有次方了,直接判断大小即可。

注意:xyz都大于等于1的时候可以直接套两层ln,但是如果有小于1的数,取一次对数会变成负的,那么直接判定这个a不是最大的。三个数都小于1的话第一次取对数之后做相反数变成正的,再取第二次,这时候就要找最小的a了。

#include<cstdio>
#include<iostream>
#include<cstring>
#include<string>
#include<algorithm>
#include<cmath>
using namespace std;
double x,y,z;
double a[110];
string s[20];
bool v[20];
int fu;
int main(){
	scanf("%lf%lf%lf",&x,&y,&z);
	for(int i=1;i<=12;i++)v[i]=1;
	int c=0;
	double maxx=0;
	if(x<1&&y<1&&z<1){
		a[1]=z*log(y)+log(-log(x));
		a[2]=y*log(z)+log(-log(x));
		a[3]=log(y*z)+log(-log(x));
		a[4]=log(y*z)+log(-log(x));
		a[5]=z*log(x)+log(-log(y));
		a[6]=x*log(z)+log(-log(y));
		a[7]=log(x*z)+log(-log(y));
		a[8]=log(x*z)+log(-log(y));
		a[9]=y*log(x)+log(-log(z));
		a[10]=x*log(y)+log(-log(z));
		a[11]=log(x*y)+log(-log(z));
		a[12]=log(x*y)+log(-log(z));
		for(int i=1;i<=12;i++){
			if(c==0||maxx>a[i]){
				maxx=a[i];
				c=i;
			}
		}
	}else{
		if(x<1)v[1]=v[2]=v[3]=v[4]=0;
		if(y<1)v[5]=v[6]=v[7]=v[8]=0;
		if(z<1)v[9]=v[10]=v[11]=v[12]=0;
		if(v[1])a[1]=z*log(y)+log(log(x));
		if(v[2])a[2]=y*log(z)+log(log(x));
		if(v[3])a[3]=log(y*z)+log(log(x));
		if(v[4])a[4]=log(y*z)+log(log(x));
		if(v[5])a[5]=z*log(x)+log(log(y));
		if(v[6])a[6]=x*log(z)+log(log(y));
		if(v[7])a[7]=log(x*z)+log(log(y));
		if(v[8])a[8]=log(x*z)+log(log(y));
		if(v[9])a[9]=y*log(x)+log(log(z));
		if(v[10])a[10]=x*log(y)+log(log(z));
		if(v[11])a[11]=log(x*y)+log(log(z));
		if(v[12])a[12]=log(x*y)+log(log(z));
		for(int i=1;i<=12;i++){
			if(v[i]){
				if(c==0||maxx<a[i]){
					maxx=a[i];
					c=i;
				}
			}
		}
	}
	s[1]="x^y^z";
	s[2]="x^z^y";
	s[3]="(x^y)^z";
	s[4]="(x^z)^y";
	s[5]="y^x^z";
	s[6]="y^z^x";
	s[7]="(y^x)^z";
	s[8]="(y^z)^x";
	s[9]="z^x^y";
	s[10]="z^y^x";
	s[11]="(z^x)^y";
	s[12]="(z^y)^x";
	cout<<s[c]<<endl;
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值