【题意】定义函数F(n,k)为1~n的集合中选择k个数字,其中最小数字的期望

给定两个数字集A,B,A中任意数字>=B中任意数字,要求重组A使得对于i=1~n,sigma(F(Ai,Bi))最大。

【算法】数学结论+数学期望+排序

【题解】很无奈,这题放在div2 C,难以推导的期望公式,广为人知的结论,容易观察样例得出的做法,都体现了这道题的不合理性。

F(n,k)=(n+1)/(k+1)

公式推导可能触及我的知识盲区了QAQ

得到公式后,显然要求k尽可能小,n尽可能大,经验告诉我们随着两数差增大,两数相除的结果急速增大(相对的,两数差减小,两数相乘的结果急速增大)。

所以排序后反着相对就可以了,而这个结论可以通过观察样例很快得出。

#include<cstdio>
#include<cstring>
#include<cctype>
#include<cmath>
#include<algorithm>
#define ll long long
using namespace std;
int read()
{
char c;int s=,t=;
while(!isdigit(c=getchar()))if(c=='-')t=-;
do{s=s*+c-'';}while(isdigit(c=getchar()));
return s*t;
}
/*------------------------------------------------------------*/
const int inf=0x3f3f3f3f,maxn=; int n,a[maxn],c[maxn];
struct cyc{int num,ord;}b[maxn];
bool cmp(cyc a,cyc b)
{return a.num<b.num;}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)a[i]=read();
for(int i=;i<=n;i++){
b[i].num=read();
b[i].ord=i;
}
sort(b+,b+n+,cmp);
sort(a+,a+n+);
for(int i=;i<=n;i++)c[b[i].ord]=a[n-i+];
for(int i=;i<=n;i++)printf("%d ",c[i]);
return ;
}

最新文章

  1. [转载]什么是FCKeditor?功能强大的HTML编辑器!
  2. [转载]TFS与Project、Excel同步
  3. 阿里社招B2B
  4. 20145330第九周《Java学习笔记》
  5. sql替换指定字段指定字符串
  6. JSP-declareAndOutput
  7. 前向否定界定符 python正则表达式不匹配某个字符串 以及无捕获组和命名组(转)
  8. 8天学通MongoDB——第六天 分片技术
  9. 表格无边框,有内框,在table嵌套时,防止出现重复边线
  10. java.text.NumberFormat使用方法
  11. 20155232 2016-2017-3 《Java程序设计》第5周学习总结
  12. 从头开始基于Maven搭建SpringMVC+Mybatis项目(1)
  13. 本地git连接远程github
  14. C++ code:main参数
  15. python摸爬滚打之day09----初识函数
  16. Nginx访问日志、 Nginx日志切割、静态文件不记录日志和过期时间
  17. ELK 日志查询分析nginx日志
  18. WP8.1 中获取背景色和主题色
  19. 【linux】Centos下登陆mysql报错#1045 - Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: NO)
  20. linux系统之间共享文件(CentOS6)

热门文章

  1. 【目录】Spring 源码学习
  2. Django笔记 —— 表单(form)
  3. Unity3d脚本生命周期
  4. Mac下用tomcat搭建下载服务器
  5. 孤荷凌寒自学python第六十八天学习并实践beautifulsoup模块1
  6. adb usage
  7. Visual Studio 2005安装包
  8. 字面值常量&amp;&amp;转义序列
  9. 并查集——poj2524(入门)
  10. 7forJava