概率与期望New Year and Arbitrary Arrangement

New Year and Arbitrary Arrangement

链接:登录—专业IT笔试面试备考平台_牛客网
来源:牛客网

题目描述

给定三个整数 k,pa,pbk,p_a ,p_bk,pa​,pb​ 以及一个空的序列。

每一次填充操作,会有 papa+pb\frac{p_a}{p_a+p_b}pa​+pb​pa​​的概率在序列末尾添加字符 'a'(不含引号),反之,有 pbpa+pb\frac{p_b}{p_a+p_b}pa​+pb​pb​​ 的概率在序列末尾添加字符 'b' (不含引号)。填充操作会一直执行直到序列中出现至少 kkk 个形如 "ab" 的子序列。

求填充操作结束时形如 "ab" 的子序列的期望出现次数,并对 109+710^9+7109+7 取模。

输入描述:

第一行包含三个整数 k,pa,pb(1≤k≤1000,1≤pa,pb≤1000000)k,p_a,p_b(1\leq k\leq 1000,1\leq p_a,p_b\leq 1000000)k,pa​,pb​(1≤k≤1000,1≤pa​,pb​≤1000000)。

输出描述:

输出一个整数,代表取模后的期望次数。

示例1

输入

复制1 1 1

1 1 1

输出

复制2

2

说明

第一个样例中,我们会不断添加字符知道子序列 "ab" 至少出现了一次。例如,我们有 1/4 的概率得到序列 "ab",有 1/16 的概率得到序列 "bbab",以及由 1/8 的概率得到序列 "aab"。注意,我们不可能得到序列 "aabab" ,因为当我们得到前缀 "aab" 时就会立即停止操作。

所有合法序列中,子序列 "ab" 的期望出现次数是 2。

示例2

输入

3 1 4

输出

370000006

说明

第二个样例中,未取模的答案是 341100\frac{341}{100}100341​。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define endl '\n'
const ll mod = 1e9 + 7;
const int N = 1001;
int x, y;
void exgcd(int a, int b, int &x, int &y)
{
	if (b == 0)
	{
		x = 1;
		y = 0;
		return;
	}
	exgcd(b, a % b, x, y);
	int t = x;
	x = y;
	y = t - a / b * y;
	return;
}//用扩展欧几里得求逆元
ll inv(int a, int b)
{
	exgcd(a, b, x, y);
	return (x % b + b) % b;
}

ll k, a, b, pab, pa, pb;
ll dp[N][N];
int main()
{
	cin >> k >> a >> b;
	pab = a + b;
	pa = a * inv(pab, mod) % mod;
	pb = b * inv(pab, mod) % mod;
	for (int i = k - 1; i >= 0; i--)
	{
		for (int j = k; j >= 1; j--)
		{
			if (i + j >= k)
			{
				dp[i][j] = ((i + j) % mod + pa * inv(pb, mod) % mod) % mod;
			}
			else
			{
				dp[i][j] = (pb*dp[i+j][j]%mod + pa*dp[i][j+1]%mod)%mod;
			}
		}
	}
	dp[0][0]=dp[0][1]%mod;
	cout<<dp[0][0];
}

### AKConv 卷积核概述 AKConv 是一种新型的卷积核设计方法,旨在通过支持任意采样形状和参数数量来提升模型的表现力和灵活性。这种方法突破了传统卷积操作对于固定形状和规则网格结构的限制,允许更灵活地定义卷积核的行为。 #### 1. **任意采样形状** 传统的卷积神经网络 (CNNs) 中使用的卷积核通常基于固定的矩形或方形窗口进行计算。然而,在实际应用中,图像或其他数据可能包含复杂的几何模式,这些模式无法被简单的正则化卷积捕捉到。AKConv 提出了可以通过自定义的方式设定卷积核的采样区域[^4],从而适应不同的输入特征分布情况。 #### 2. **任意参数数量** 除了能够调整采样的形态外,AKConv 还提供了控制所需学习参数总数的能力。这意味着开发者可以根据具体任务需求平衡精度效率之间的关系。例如,在资源受限环境下运行的小型设备上部署深度学习模型时尤为重要。 #### 3. **定义初始采样位置** 为了实现上述目标之一即创建具有特定形式的空间布局点集作为滤波器作用范围内的像素坐标集合, 需要先确定一组基础参考点用于后续变换过程中的定位依据 。这部分工作涉及到如何科学合理的选择原始候选节点以及制定相应的转换策略使得最终得到的结果既满足理论上的完备性同时也具备良好的实践效果 . #### 4. **实施细节** 在技术层面实现这样一个高度可配置化的解决方案并非易事 , 它至少包括以下几个方面 : - 开发专用算法用来动态生成符合预期规格要求的新类型过滤单元 ; - 设计高效的训练机制确保整个系统能够在保持较高收敛速度的同时达到满意的泛化能力水平; 下面给出一段伪代码展示了一个简化版本的 AKConv 实现思路: ```python class AKConv(nn.Module): def __init__(self, in_channels, out_channels, num_params=8, sample_shape='custom'): super(AKConv, self).__init__() # Initialize parameters based on the number specified by 'num_params' self.weights = nn.Parameter(torch.randn(out_channels, in_channels, num_params)) # Define sampling positions according to given shape ('sample_shape') if sample_shape == 'custom': self.sample_positions = generate_custom_sample_positions() def forward(self, x): result = [] for i in range(len(x)): sampled_x = interpolate_at_positions(x[i], self.sample_positions) convolved_feature = torch.matmul(sampled_x, self.weights) result.append(convolved_feature) return torch.stack(result) def generate_custom_sample_positions(): """Generate custom sampling locations.""" pass def interpolate_at_positions(input_tensor, positions): """Interpolate values at specific spatial coordinates.""" pass ``` 此段代码仅作示意用途,并未完全体现所有功能特性及其内部运作原理。 #### 5. **使用场景** 由于其独特的特性和优势,Akconv 可广泛应用于多个领域如计算机视觉(CV),自然语言处理(NLP)等领域当中解决那些难以用标准工具有效应对的问题实例. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值