zoukankan      html  css  js  c++  java
  • 【17.00%】【codeforces 621D】Rat Kwesh and Cheese

    time limit per test2 seconds
    memory limit per test256 megabytes
    inputstandard input
    outputstandard output
    Wet Shark asked Rat Kwesh to generate three positive real numbers x, y and z, from 0.1 to 200.0, inclusive. Wet Krash wants to impress Wet Shark, so all generated numbers will have exactly one digit after the decimal point.

    Wet Shark knows Rat Kwesh will want a lot of cheese. So he will give the Rat an opportunity to earn a lot of cheese. He will hand the three numbers x, y and z to Rat Kwesh, and Rat Kwesh will pick one of the these twelve options:

    a1 = xyz;
    a2 = xzy;
    a3 = (xy)z;
    a4 = (xz)y;
    a5 = yxz;
    a6 = yzx;
    a7 = (yx)z;
    a8 = (yz)x;
    a9 = zxy;
    a10 = zyx;
    a11 = (zx)y;
    a12 = (zy)x.
    Let m be the maximum of all the ai, and c be the smallest index (from 1 to 12) such that ac = m. Rat’s goal is to find that c, and he asks you to help him. Rat Kwesh wants to see how much cheese he gets, so he you will have to print the expression corresponding to that ac.

    Input
    The only line of the input contains three space-separated real numbers x, y and z (0.1 ≤ x, y, z ≤ 200.0). Each of x, y and z is given with exactly one digit after the decimal point.

    Output
    Find the maximum value of expression among xyz, xzy, (xy)z, (xz)y, yxz, yzx, (yx)z, (yz)x, zxy, zyx, (zx)y, (zy)x and print the corresponding expression. If there are many maximums, print the one that comes first in the list.

    xyz should be outputted as x^y^z (without brackets), and (xy)z should be outputted as (x^y)^z (quotes for clarity).

    Examples
    input
    1.1 3.4 2.5
    output
    z^y^x
    input
    2.0 2.0 2.0
    output
    x^y^z
    input
    1.9 1.8 1.7
    output
    (x^y)^z

    【题解】

    200^200^200是无法接受的;
    考虑取log之后再比较;->高中老师教过的方法我怎么就忘了呢。
    然后200^200->1e460左右;但是在long double 前这都不算啥;
    long double 最高到10^4932;
    所以放心用吧;
    另外如果取两次对数会失精度;
    一大波WA在等着你;
    取对数的时候加加减减小心点;
    (或者取两次对数,给的x,y,z比较小的时候直接算.否则取两次对数?->考虑x小于1的时候直接乘,但是0.1 200 200 这样的数据没办法直接算,而两次log精度又不够,所以long double+只取一次log是最好的选择;)

    #include <cstdio>
    #include <cmath>
    #include <set>
    #include <map>
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <queue>
    #include <vector>
    #include <stack>
    #include <string>
    #define lson L,m,rt<<1
    #define rson m+1,R,rt<<1|1
    #define LL long long
    
    using namespace std;
    
    //const int MAXN = x;
    const int dx[5] = {0,1,-1,0,0};
    const int dy[5] = {0,0,0,-1,1};
    const double pi = acos(-1.0);
    
    long double x,y,z;
    long double ans[15];
    
    void input_LL(LL &r)
    {
        r = 0;
        char t = getchar();
        while (!isdigit(t)) t = getchar();
        LL sign = 1;
        if (t == '-')sign = -1;
        while (!isdigit(t)) t = getchar();
        while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
        r = r*sign;
    }
    
    void input_int(int &r)
    {
        r = 0;
        char t = getchar();
        while (!isdigit(t)) t = getchar();
        int sign = 1;
        if (t == '-')sign = -1;
        while (!isdigit(t)) t = getchar();
        while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
        r = r*sign;
    }
    
    int main()
    {
        //freopen("F:\rush.txt", "r", stdin);
        cin>>x>>y>>z;
        ans[1] = pow(y,z)*log(x);
        ans[2] = pow(z,y)*log(x);
        ans[3] = z*y*log(x);
        ans[4] = ans[3];
        ans[5] = pow(x,z)*log(y);
        ans[6] = pow(z,x)*log(y);
        ans[7] = x*z*log(y);
        ans[8] = ans[7];
        ans[9] = pow(x,y)*log(z);
        ans[10] = pow(y,x)*log(z);
        ans[11] = x*y*log(z);
        ans[12] = ans[11];
        int j = 1;
        for (int i = 2;i <= 12;i++)
            if (ans[j]<ans[i])
                j = i;
        switch (j)
        {
        case 1:
            puts("x^y^z");
            break;
        case 2:
            puts("x^z^y");
            break;
        case 3:
            puts("(x^y)^z");
            break;
        case 4:
            puts("(x^z)^y");
            break;
        case 5:
            puts("y^x^z");
            break;
        case 6:
            puts("y^z^x");
            break;
        case 7:
            puts("(y^x)^z");
            break;
        case 8:
            puts("(y^z)^x");
            break;
        case 9:
            puts("z^x^y");
            break;
        case 10:
            puts("z^y^x");
            break;
        case 11:
            puts("(z^x)^y");
            break;
        case 12:
            puts("(z^y)^x");
            break;
        }
        return 0;
    }
  • 相关阅读:
    beego学习笔记(4):开发文档阅读(1)
    go的匿名组合
    beego学习笔记(3)
    beego学习笔记(2)
    python发送post请求发送json数据时,报415的原因和处理方法。
    Kali Linux的安装
    linux下配置mysql的远程访问
    selenium学习笔记
    Fiddler使用方法简介
    使用webdriver打开本地浏览器--python版
  • 原文地址:https://www.cnblogs.com/AWCXV/p/7632110.html
Copyright © 2011-2022 走看看