[CF248E]Piglet's Birthday

https://zybuluo.com/ysner/note/1236827

题面

给定 \(n\) 个货架,初始时每个上面有 \(a_i\) 个蜜罐。
\(q\) 次操作,每次操作形如 \(u,v,k\) ,表示从货架 \(u\) 上任意选择 \(k\) 个蜜罐试吃(吃过的也还能吃),吃完后把这 \(k\) 个蜜罐放到 \(v\) 货架上去。
每次操作完之后回答所有蜜罐都被试吃过的货架数量的期望。

  • \(n,q\leq10^5,a_i\leq100,k\leq5\)

    解析

    又一次看到期望题就boom 0
    状态不难,设\(f[i][j]\)表示第\(i\)个书架,有\(j\)个没被吃过的罐的期望。(其实也是概率)。
    枚举货架上原有罐没被吃过的个数\(i\)\(k\)个罐中没被吃过的个数\(j\)
    原有\(DP\)值乘上情况如此的方案数(分吃过的罐和没吃过的罐)\(C_{i+j}^{j}*C_{b[u]-i-j}^{k-j}\),再除以总方案数\(C_{b[u]}^k\),即得概率。
    乘上所得结果?不存在的。于是这个概率就成了期望。

注意公式\[C_n^m=\sum_{i=1}^m\frac{n-i+1}{i}\]

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#define re register
#define il inline
#define ll long long
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define fp(i,a,b) for(re int i=a;i<=b;i++)
#define fq(i,a,b) for(re int i=a;i>=b;i--)
using namespace std;
const int mod=1e9+7,N=1e5+100;
int n,m,a[N],b[N],Q;
double dp[N][115],ans;
il ll gi()
{
   re ll x=0,t=1;
   re char ch=getchar();
   while(ch!='-'&&(ch<'0'||ch>'9')) ch=getchar();
   if(ch=='-') t=-1,ch=getchar();
   while(ch>='0'&&ch<='9') x=x*10+ch-48,ch=getchar();
   return x*t;
}
il double C(re int x,re int y)
{
  if(x<y) return 0;
  double res=1;
  fp(i,1,y) res=res*(x-i+1)/i;
  return res;
}
int main()
{
  n=gi();fp(i,1,n) a[i]=b[i]=gi(),dp[i][a[i]]=1,ans+=dp[i][0];
  Q=gi();
  while(Q--)
    {
      re int u=gi(),v=gi(),k=gi();ans-=dp[u][0];
      fp(i,0,a[u])
    {
      double tmp=0,t=C(b[u],k);
      fp(j,0,k) //printf("%lf %lf %lf %lf\n",dp[u][i+j],C(i+j,j),C(b[u]-i-j,k-j),t)
        tmp+=dp[u][i+j]*C(i+j,j)*C(b[u]-i-j,k-j)/t;
      dp[u][i]=tmp;
    }
      b[u]-=k;b[v]+=k;ans+=dp[u][0];printf("%.10f\n",ans);
    }
  return 0;
}

转载于:https://www.cnblogs.com/yanshannan/p/9411044.html

### 回答1: Piglet是一个用于导入GLTF格式文件的工具。GLTF是一种开放的3D文件格式,被广泛用于虚拟现实(VR)和增强现实(AR)应用中。Piglet的主要功能是将以GLTF格式保存的三维模型导入到应用程序中进行进一步处理和使用。 Piglet具有以下特点和优势。首先,它的导入功能非常强大,能够处理包括几何形状、纹理、动画和材质等多种GLTF文件中的内容。这使得用户可以轻松地将复杂的3D模型导入到他们的项目中。 此外,Piglet还支持多种不同平台上的使用,包括Windows、Mac和Linux等操作系统。这样,用户可以根据自己的需求选择合适的平台进行工作。 Piglet还具有用户友好的界面,使得使用者可以方便地操作该工具。用户可以通过简单的拖放操作将GLTF文件拖入Piglet,并在导入过程中选择需要导入的特定项目。 最后,在导入过程中,Piglet还提供了一些额外的选项,如坐标轴的设置、导入纹理的压缩方式等。这些选项可以帮助用户更好地控制导入结果,以满足他们的需求。 总的来说,Piglet是一个强大、灵活且易于使用的GLTF导入工具。它为用户提供了一种快速和高效地将GLTF文件导入到他们的项目中的方式,从而为他们的虚拟现实和增强现实应用带来更多的可能性。 ### 回答2: Piglet是一个GLTF导入器,用于将GLTF文件格式转换为可用于计算机图形渲染的可视化对象。 GLTF是一种开放的文件格式,用于在不同的图形应用程序之间传输和加载3D图形模型和场景。它是由Khronos Group开发的一种标准格式,可以在各种平台和设备上使用。 Piglet导入器的主要功能是通过解析GLTF文件,将其中的几何形状、材质、动画和其他相关数据提取出来,并转换为可用于在计算机图形渲染中进行渲染和显示的对象。 导入器会首先读取GLTF文件的头部信息,以了解文件的结构和内容。然后,它会逐个解析文件中的节点、场景、材质、纹理和动画数据,并构建相应的对象来表示它们。 对于几何形状,导入器会读取顶点、法线、纹理坐标和顶点索引等数据,并构建相应的网格或曲面对象。对于材质和纹理,导入器会读取颜色、反射、透明度和纹理图像等属性,并创建相关的材质对象。 对于动画,导入器会读取关键帧、骨骼、骨骼动作和动画曲线等数据,并将其转换为适合计算机图形渲染的动画对象。 最后,导入器将这些对象组合起来,构建一个包含完整场景信息的数据结构,并将其返回给应用程序使用。 总之,Piglet是一个实用而强大的GLTF导入器,可以将GLTF文件转换为计算机图形渲染中所需的可视化对象,为用户提供了更灵活的处理和展示3D图形模型和场景的方式。 ### 回答3: Piglet是一个gltf导入器,专门用于在计算机图形学和虚拟现实应用中导入gltf文件格式的模型和场景数据。 gltf(GL Transmission Format)是一种开放的3D文件格式,用于在不同的3D工具之间交换模型和场景数据。与其他传统的3D文件格式相比,如OBJ或FBX,gltf具有许多优点。它是一种基于JSON的文本格式,可以轻松地在不同的平台和设备之间共享和解析。此外,gltf还支持对纹理、材质、动画、骨骼等3D对象的完整描述。 Piglet作为一个gltf导入器,具有以下功能和特点。首先,它能够读取和解析gltf文件,并提取其中的模型和场景数据。它能够识别和导入gltf中的几何体、纹理、材质、灯光、动画等元素。其次,Piglet可以根据gltf中的数据创建对应的渲染资源,并将其导入到计算机图形学引擎中进行渲染和展示。它可以处理复杂的几何体和纹理,并保留其原始的质量和细节。此外,Piglet还支持对导入的模型数据进行进一步的编辑和处理,例如改变模型的大小、位置和旋转等。 Piglet还支持导入gltf中的动画数据,可以实现模型的骨骼动画、形状关键帧动画和顶点动画等效果。用户可以根据自己的需求选择动画播放的方式和参数,实现自定义的动画效果。另外,Piglet还兼容多种计算机图形学引擎和开发平台,使得开发者可以方便地将gltf导入到自己的项目中,进行二次开发和应用。 总之,Piglet是一个强大的gltf导入器,可以帮助用户轻松地导入和使用gltf文件格式的模型和场景数据。它提供了丰富的功能和灵活的接口,使得gltf的导入过程变得简单而高效。无论是用于游戏开发、虚拟现实应用还是计算机图形学研究,Piglet都是一个不可或缺的工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值