【HDOJ 5419】 Victor and Toys (排列组合)
n个玩具 m个区间
每一个玩具有一个beauty值 问任选三个区间 三区间的MINleft~MAXright的和的期望值
预处理一个数组 存放每一个位置被几个区间囊括 这样该位置被选择的概率为c(x,3)/c(m,3)
若beauty数组为w 预处理数组a
期望值即为 w[i]*c(a[i],3)/c(m,3) i∈[1,n]
注意防止乘法爆long long
代码例如以下:
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #define ll long long
- using namespace std;
- int w[50001];
- int ad[50002];
- ll C(ll n)//c(n,3)
- {
- if(n < 3) return 0;
- ll ans = 1;
- for(int i = 2; i >= 0; --i)//防爆long long
- ans = ans*(n-i)/(3-i);
- return ans;
- }
- ll gcd(ll a,ll b)//约分
- {
- ll tmp;
- while(b)
- {
- tmp = b;
- b = a%b;
- a = tmp;
- }
- return a;
- }
- int main()
- {
- int t,n,m,i,l,r;
- ll fz,fm,gd,lst;
- scanf("%d",&t);
- while(t--)
- {
- scanf("%d %d",&n,&m);
- for(i = 1; i <= n; ++i)
- scanf("%d",&w[i]);
- memset(ad,0,sizeof(ad));
- for(i = 0; i < m; ++i)
- {
- scanf("%d %d",&l,&r);
- ad[l]++;
- ad[r+1]--;
- }
- if(m < 3)//不这样做会越界。
- 。血的教训
- {
- puts("0");
- continue;
- }
- fm = C(m);
- fz = lst = 0;
- for(i = 1; i <= n; ++i)//预处理被选次数顺带把期望求了。。
- {
- lst += ad[i];
- fz += w[i]*C(lst);
- }
- gd = gcd(fz,fm);
- fz /= gd;
- fm /= gd;
- if(fm == 1) printf("%I64d\n",fz);
- else printf("%I64d/%I64d\n",fz,fm);
- }
- return 0;
- }
【HDOJ 5419】 Victor and Toys (排列组合)的更多相关文章
- HDOJ 5419 Victor and Toys 树状数组
分母是一定的C(m,3) 树状数组求每一个数能够在那些段中出现,若x出如今了s段中,分子加上w[x]*C(s,3) Victor and Toys Time Limit: 2000/1000 MS ( ...
- HDU - 5419 Victor and Toys(组合计数)
http://acm.hdu.edu.cn/showproblem.php?pid=5419 题意 n个物品,标号1-n,物品i有权值wi.现在有m个区间[l,r],从中任意选三个区间i,j,k,求物 ...
- HDU 5419——Victor and Toys——————【线段树|差分前缀和】
Victor and Toys Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/131072 K (Java/Others ...
- 学习sql中的排列组合,在园子里搜着看于是。。。
学习sql中的排列组合,在园子里搜着看,看到篇文章,于是自己(新手)用了最最原始的sql去写出来: --需求----B, C, F, M and S住在一座房子的不同楼层.--B 不住顶层.C 不住底 ...
- .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)
今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinatorics组件的使用情况,其实这个组件我5年前就开始用了,非常方便,麻雀虽小五脏俱全.所以一直非常喜欢,才写了几 ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(二)——排列生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(一)—组合生成
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- hdu1521 排列组合(指数型母函数)
题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数. (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...
随机推荐
- Maven+Docker,发布到Registry
1.配置Pom.xml <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEnc ...
- [转]c# 对密码执行散列和 salt 运算方法
本文转自:http://www.cnblogs.com/CnBlogFounder/archive/2008/07/04/1235690.html 大家对密码执行散列和Salt运算一定不陌生.两个Vi ...
- CSS实现两栏布局
写在前面 两栏布局是指页面布局由主栏和边栏组成,是许多网页的布局方式,一般使用CSS去实现两栏布局. 实现两栏布局的方式有多种,这里采用四种比较常见的实现方式.主要是流体布局(liquid layou ...
- linux下vim命令汇总
一. 进入vi的命令 vi filename : 打开或新建文件,并将光标置于第一行首 vi +n filename : 打开文件,并将光标置于第n行首 vi + filename : 打开文件,并将 ...
- CNN结构:色温-冷暖色的定义和领域区分(一)
转自知乎和百度百科:从零开始学后期 (色温的奥秘) 文章: 冷暖色区分?冷暖肤色适用于那些色系的彩妆? 文章:干货 |如何判断人体色冷暖?如何判断色彩冷暖?(值得收藏研读!) -蒜苗的回答 ...
- Windows Phone 8: NavigationInTransition实现页面切换效果
NavigationInTransition这个是实现页面切换效果,而且没控件来拖,要自己手动写, 将App.xaml.cs中InitializePhoneApplication()函数里的RootF ...
- AcRxClass::addX
AcRxClass::addX函数 virtual AcRxObject * addX( AcRxClass* pProtocolClass, AcRxObject* pProtocolObject) ...
- cad二次开发中各种头的定义
Database db=HostApplicationServices.WrokingDatabase; Editor ed=Autodesk.AutoCAD.ApplicationService.A ...
- CF1148D-Dirty Deeds Done Dirt Cheap
这轮CF怎么充满了替身啊233(这是场只有替身使者才能看见的比赛) 题解可以看官方的 这里就是记录下自己当初是怎么没做上的233 忽视掉了分类后pair本身就会带有的性质(a<b or a> ...
- linux常用命令--ubuntu
linux 操作系统 一.linux 操作系统概述 二.安装linux系统 三.linux系统环境 ubuntu,默认有6个命令交互通道和一个图形界面交互通道,默认进入到的是图形界面通道 命令交互模式 ...