hdu 4438 && la 6389

题目概述

A,B两人比赛打猎,老虎(tiger)X分,狼(wolf)Y分,两种猎物都只有一只,开始前两人会先选定各自的目标,若两人选的不同,则各打各的,都能得到自己选的猎物的分数,若选的相同,则A有P的概率得手,B有1-P的概率得手,之后两人会去打另一只猎物,得手概率不变,好在A了解B,他知道B选老虎的概率是Q,选狼是1-Q,问A选什么猎物分数期望较高,是多少分

时限

1000ms/2000ms

输入

第一行整数times,其后times组数据,每组数据两个整数X,Y,两个浮点数P,Q

限制

1<=X<=1e9;0.0<=P,Q<=1.0

输出

每行一个字符串,若选虎分高,为tiger,否则为wolf,其后一个保留四位小数的浮点数,为期望得分

样例输入

3
2 1 0.5 0.5
2 1 0 1
7 7 0.32 0.16

样例输出

tiger 1.7500
wolf 1.0000
tiger 6.5968

讨论

水题,若A选虎,有1-Q的概率(这也就是B不选虎的概率)完成单杀,这是(1-Q)X的期望,当B也选的虎,概率为Q,抢的时候,抢到每个猎物概率都是P,因而是QP(X+Y)的期望,加和就是选虎的总期望,若A选狼,有Q的概率单杀,这是QY,若(1-Q)的概率要抢,期望是(1-Q)P(X+Y),加和得选狼的期望,二者比较,得出结果
一个常数级的水题能这么慢,这是得有多少组数据

题解状态

78MS,1720K,587 B,C++

题解代码

#include
#include
#include
#include
using namespace std;
#define INF 0x3f3f3f3f
#define MAXN 1003
#define memset0(a) memset(a,0,sizeof(a))

void fun()
{
    double X, Y, P, Q;
    scanf("%lf%lf%lf%lf", &X, &Y, &P, &Q);
    double a = (1 - Q)*X + Q*P*(X + Y);//选虎
    double b = Q*Y + (1 - Q)*P*(X + Y);//选狼
    if (a > b)
        printf("tiger %.4lf\n", a);//output
    else
        printf("wolf %.4lf\n", b);//output
}
int main(void)
{
    //freopen("vs_cin.txt", "r", stdin);
    //freopen("vs_cout.txt", "w", stdout);

    int times;
    scanf("%d", ×);//input
    while (times--)
        fun();
}

EOF

你可能感兴趣的:(水题,poj,uvalive)