列表

详情


BD3. 钓鱼比赛

描述

ss请cc来家里钓鱼,鱼塘可划分为n*m的格子,每个格子有不同的概率钓上鱼,cc一直在坐标(x,y)的格子钓鱼,而ss每分钟随机钓一个格子。问t分钟后他们谁至少钓到一条鱼的概率大?为多少?

输入描述

对于每组数据,第一行五个整数n,m,x,y,t(1≤n,m,t≤1000,1≤x≤n,1≤y≤m);
接下来为一个n*m的矩阵,每行m个一位小数,共n行,第i行第j个数代表坐标为(i,j)的格子钓到鱼的概率为p(0≤p≤1)

输出描述

输出两行。第一行为概率大的人的名字(cc/ss/equal),第二行为这个概率(保留2位小数)

示例1

输入:

2 2 1 1 1
0.2 0.1
0.1 0.4

输出:

equal
0.20

原站题解

C++ 解法, 执行用时: 20ms, 内存消耗: 8420KB, 提交时间: 2017-05-04

# include<stdio.h>
# include<math.h>
# include <stdlib.h>
# include <string.h>
# include <iostream>
using namespace std;

int main ()
    {
    int n,m,x,y,t;
    
    while(~scanf("%d%d%d%d%d",&n,&m,&x,&y,&t))
        {
         double arr[n][m];
         double pss=0;
         double pcc=0;
         for(int i=0;i<n;i++)
             {
             for(int j=0;j<m;j++)
                 {
                 scanf("%lf",&arr[i][j]);
                 pss+=arr[i][j];
             }
         }
        pss/=(n*m);
        pcc=arr[x-1][y-1];
        if(pss<pcc)
            {
            printf("cc\n");
            printf("%.2lf\n",1-pow(1-pcc,t));
        }
        else if(pss>pcc)
            {
            printf("ss\n");
            printf("%.2lf\n",1-pow(1-pss,t));
        }
        else
            {
            printf("equal\n");
            printf("%.2lf\n",1-pow(1-pss,t));
        }
    }
    return 0;
}

C++ 解法, 执行用时: 20ms, 内存消耗: 8420KB, 提交时间: 2017-03-27

#include <stdio.h>
#include <math.h>
int main(void)
{
    int n,m,x,y,t;
    while(scanf("%d %d %d %d %d",&n,&m,&x,&y,&t)!=EOF)
    {
        double fish[n][m];
        int p,q;
        double pcc,pss;
        double count1,count2;
        count1=count2=0;
        for(p=0;p<n;p++)  
			for(q=0;q<m;q++)
            {
                 scanf( "%lf",&fish[p][q]);
                 count2+=fish[p][q];
            }        
        pss=count2/(n*m);
        pcc=fish[x-1][y-1];
        if(pss-pcc>0)
        {
            puts("ss");
            printf("%.2lf\n",1-pow(1-pss,t));
        }
        else if(pss-pcc<0)
            {
                puts("cc");
                printf("%.2lf\n",1-pow(1-pcc,t));
        	}
        	else
            {
                puts("equal");
                printf("%.2lf\n",1-pow(1-pss,t));
            }
       }
    return 0;
}

C++ 解法, 执行用时: 20ms, 内存消耗: 8420KB, 提交时间: 2016-09-01

#include <cstdio>
#include <cmath>
#define eps 1e-8
int main(){
    int n,m,x,y,t;
    double a[1001][1001],sum;
    while(scanf("%d%d%d%d%d",&n,&m,&x,&y,&t)!=EOF){
        x--,y--;
        sum=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<m;j++){
                scanf("%lf",&a[i][j]);
                sum+=a[i][j];
            }
        }
        //printf("%lf %lf\n",sum,n*m*a[x][y]);
        if(fabs(n*m*a[x][y]-sum)<=eps){
            puts("equal");
            printf("%.2lf\n",1-pow(1-a[x][y],t));
        }
        else if(n*m*a[x][y]>eps+sum){
            puts("cc");
            printf("%.2lf\n",1-pow(1-a[x][y],t));
        }
        else{
            puts("ss");
            printf("%.2lf\n",1-pow(1-sum/n/m,t));
        }
    }
}

C++ 解法, 执行用时: 20ms, 内存消耗: 8460KB, 提交时间: 2017-04-28

#include<stdio.h>
#include<math.h>

int main()
{
    int n,m,x,y,t;
    while(scanf("%d%d%d%d%d",&n,&m,&x,&y,&t)!=EOF)
    {
        double cc=0.0,ss=0.0;
        double tmp;
        for(int i=1; i<=n; i++)
        {
            for(int j=1; j<=m; j++)
            {
                scanf("%lf",&tmp);
                if(i==x&&j==y) cc=1-tmp;
                ss+=tmp;
            }
        }
        ss=1-ss/(n*m);
        cc=1-pow(cc,t);
        ss=1-pow(ss,t);
 //               printf("%f\t%f\n",ss,cc);
        if(cc==ss)
        {
            printf("equal\n%.2f\n",cc);
        }
        else if(ss>cc)
        {
            printf("ss\n%.2f\n",ss);
        }
        else
        {
             printf("cc\n%.2f\n",cc);
        }

    }
    return 0;
}

C++ 解法, 执行用时: 20ms, 内存消耗: 8460KB, 提交时间: 2017-03-16

#include <cstdio>
#include <math.h>

using namespace std;

int main(void)
{
    int n, m, x, y, t;
    float p;
    while(~scanf("%d%d%d%d%d", &n, &m, &x, &y, &t)){
        float sum1 = 0, sum2 = 0, p2=0;
        for(int i = 1; i <= n; i++){
            for(int j = 1; j <= m; j++){
                scanf("%f", &p);
                sum1 += p;
                if(x == i && y == j)
                    p2 = p;
            }
        }
        sum1 = 1 - pow(1-sum1/(float)(m*n), t);
        sum2 = 1 - pow(1-p2, t);
        if(sum2 == sum1) printf("equal\n%.2f\n", sum2);
        else if(sum1 > sum2) printf("ss\n%.2f\n", sum1);
        else printf("cc\n%.2f\n", sum2);
    }
    return 0;
}

上一题