ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Google kick start 2018 Round A - Lucky Dip

2019-08-28 11:05:29  阅读:440  来源: 互联网

标签:Google 期望 int sum Lucky start num 10240 拿球


题目链接

这个题当时就思路错掉了,样例都推不出来,看来想进google数学得过关。

题意就是给你一堆有权值的球,每次等概率拿一个,可以放回,有K次机会,求最大期望。其实我当时根本没在意最大期望和那句“如果你第K次拿了,那你就只能留在手里了”,看了官方分析才知道,这两句话有大用,不然就是求期望,而不是最大期望,吃了没文化的亏。思路是这样:第一次拿球有一个期望E[0] =\frac{\sum Vi}{N} ,后面每一个放回拿球的期望E[i]都是要和前一次的期望做对比的,因为如果我第二次拿球拿的值还不如上一次的期望值高那我还拿干什么,所以E[i] = \frac{\sum min(Vi,E[i-1]]))}{n}。说实话,如果这个推不出来这个题小样例都过不去。太南了。


#include<bits/stdc++.h>
using namespace std;
double num[2*10240];
double sum[2*10240];
double E[5*10240];
int main()
{
    int testcase;
    cin >> testcase;
    for(int kase = 1;kase<=testcase;kase++)
    {
    	memset(num,0,sizeof(num));
    	memset(E,0,sizeof(E));
    	int n,K;
    	cin >> n >> K;
    	for(int i = 0;i < n;i++)
    		cin >> num[i];
		sort(num,num + n);
		sum[0] = num[0];
		for(int i = 1;i < n;i++)
    		sum[i] = num[i] + sum[i-1];
    	for(int i = 0;i < n;i++)
    		E[0] += num[i];
    	E[0] /= n;
    	for(int i = 1;i <= K;i++)
    	{
    		int ind = lower_bound(num,num+n,E[i-1]) - num;
    		E[i] += ind * E[i-1];
    		//cout << E[i] << endl; 
    		E[i] += sum[n-1]-sum[ind-1];
    		//cout << E[i] << endl;
    		E[i] /= n;
    		//cout << E[i] << endl; 
		}
    	printf("Case #%d: %.6lf\n",kase,E[K]);
	}
    return 0;
}

 

标签:Google,期望,int,sum,Lucky,start,num,10240,拿球
来源: https://blog.csdn.net/zjbh89757/article/details/100114474

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有