首页 > 其他分享 >海亮 7.24 水题选讲

海亮 7.24 水题选讲

时间:2023-07-24 14:56:18浏览次数:50  
标签:水题 int 海亮 选讲 答案 7.24

海亮 7.24 水题选讲

The Maximum Prefix

我们设定一个状态 \(f_{i,j}\) 表示这个序列的 \([i+1,n]\) 区间的最大前缀和为 \(j\),这个序列的期望得分。

转移为 \(f_{i,j}=f_{i-1,j+1}\times p_i+f_{i-1,\max\left(j-1,0\right)}\times\left(1-p_i\right)\)。

第一个整式表示第 \(i\) 个数选 \(1\),第二个整式表示选 \(-1\)。

初始化即 \(f_{0,i}=h_i\)。

这个状态和方程不难得到,主要考虑如何计算答案。

首先长度为 \(n\) 的答案肯定为 \(f_{n,0}\)。

考虑长度为 \(k\) 的答案,其中 \(1\le k < n\)。

我们发现你构造出来的长度为 \(k\) 的序列其实等价于 \([k+1,n]\) 这个区间对前面没有贡献,即这个区间的最大前缀和为 \(0\)。所以答案为 \(k\) 的答案即为 \(f_{k,0}\)。

#include <bits/stdc++.h>
using namespace std;
#define endl '\n'
#define int long long
constexpr int N = 5000 + 5;
constexpr int mod = 1e9 + 7;
//char buf[1<<22] , *p1 , *p2;
//#define getchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<22,stdin),p1==p2)?EOF:*p1++)
#define getchar() cin.get() 
int read ()
{
	int x = 0 , f = 1;
	char ch = getchar();
	while ( !isdigit ( ch ) ) { if ( ch == '-' ) f = -1; ch = getchar(); }
	while ( isdigit ( ch ) ) { x = ( x << 1 ) + ( x << 3 ) + ( ch ^ 48 ); ch = getchar(); }
	return x * f;
}

int n , f[N][N] , q[N] , p[N];

int ksm ( int base , int k )
{
	int res = 1;
	while ( k )  
	{
		if ( k & 1 ) res = res * base % mod;
		base = base * base % mod;
		k >>= 1;
	}
	return res;
}

signed main ()
{
	ios::sync_with_stdio(false);
	cin.tie(0) , cout.tie(0);
	int T = read();
	while ( T -- )
	{
		memset ( f , 0 , sizeof f );
		n = read();
		for ( int i = 1 , x , y ; i <= n ; i ++ )
			x = read() , y = read() , p[i] = x * ksm ( y , mod - 2 ) % mod , q[i] = ( 1 - p[i] + mod ) % mod;
		for ( int i = 0 ; i <= n ; i ++ ) f[0][i] = read();
		for ( int i = 1 ; i <= n ; i ++ )
			for ( int j = 0 ; j <= n ; j ++ ) f[i][j] = ( f[i-1][j+1] * p[i] % mod + f[i-1][max(j-1,0ll)] * q[i] % mod ) % mod;
		for ( int i = 1 ; i <= n ; i ++ ) cout << f[i][0] << ' ';
		cout << endl;
	}
	return 0;
}

标签:水题,int,海亮,选讲,答案,7.24
From: https://www.cnblogs.com/Echo-Long/p/17577228.html

相关文章

  • 7.3-7.28海亮游记
    7.3早上到机场看到xj提前半个小时来了十分震惊快乐的飞机上写完了莫队但是下飞机挂到了\(30pts\)晚上机房开会还好提前去看了否则就是正能量大会茶话会\(day1\)"如果爱能磨平山海,如果分手能算表白."7.4海亮D1数据结构被薄纱被薄纱和反复被薄纱\(bot\)在开场\(5s\)......
  • 20230701水题选做
    CF1676D题意给定一个无根树,点从\(1\)到\(n\)编号。你需要给每个点分配一个正整数权值\(w_i\)。定义一个节点为好节点,当且仅当其权值等于所有相邻节点的权值之和。请最大化好节点的个数,并且在好节点个数最大的前提下最小化所有节点的权值和。分析我们先考虑一种特殊情况,......
  • P5719 水题
    https://www.luogu.com.cn/problem/P5719唠唠:别看这题很水,且只要求保留小数点后一位,倘若用float而不是double的话就无法AC,洛谷评测则只有40分。所以一定要用double!总结:能用double就别用floatCode`#includeincludeincludeincludeincludeincludeincludeusingnamespaces......
  • 20230628水题选做
    约束条件题意给定一些关系\(x=y或x\neqy\)。求是否能满足。分析显然并查集。我们考虑将约束条件排序,先使形如\(x_{i}=x_{j}\)的\(x_{i}\)和\(x_{j}\)合并。而后我们观察是否存在\(x_{i}\)和\(x_{j}\)已经合并但是关系是\(\neq\)。代码#include<bits/stdc++.h>usingname......
  • 20230626水题选做
    「数学基础」第6章期望问题单选错位题意单选把答案填在后面那道题了。假设所有题都正确,求答对题目的期望值。分析期望入门题。\(E(Ans)=\sumP[i]\)。那么显然有答对本题的期望为\(\dfrac{1}{\max\left(a\left[i+1\right],a\left[i\right]\right)}\)。代码#inc......
  • 练习选讲(2023)
    6月6.9:P1486[NOI2004]郁闷的出纳员:平衡树(蓝)题解:用一个变量\(delta\)记录员工们的工资变化量。对于插入操作Ik,向平衡树中插入一个数\(k-delta\)(其他人都增加了\(delta\),但他没有增加,相当于其他人不增加,他减小\(delta\))。对于全局加法操作Ak,直接将\(delta\)增加......
  • 比赛题目选讲(2023)
    5月NOIP2018模拟Day2:ending:给定一棵\(n\)个点的树,边权\(w\in\{0,1\}\)。求出有多少个三元组\((i,j,k)\),满足\(dist(i,j),dist(i,k)>0\)。\(1\len\le10^5\)。题解:若\(w(i,j)=0\),则将\(i,j\)合并进一个连通块内。对于一个连通块,设其大小为\(size\),则对于该连通块......
  • 2023.4-2023.5 水题记录 (持续更新)
    摆烂了属于是.1.P4071[SDOI2016]排列计数错排板子,显然答案为\(\dbinom{n}{m}D_{n-m}\),\(D_k\)m为错排数.2.P5104红包发红包连续型随机变量入门题.本人不太熟练,写一下过程.根据题中条件,抽到钱数在\([0,x](x\in[0,w])\)间的概率为\(\dfrac{x}{w}\).求导得概......
  • 线段树水题
    [THUSCH2017]大魔法师​ 给定\(n\)个三元组\((A,B,C)\)。共有\(m\)种区间操作,分为三大类,七小类。1.\(A_i=A_i+B_i\)2.\(B_i=B_i+C_i\)3.\(C_i=C_i+A_i\)给定值\(v\)4.\(A_i=A_i+v\)5.\(B_i=B_i\timesv\)6.\(C_i=v\)7.区间查询所有三元组......
  • hdu:这是真正的水题(RMQ)
    ProblemDescription在缺水的地方,水是非常有限的资源,所以人们常常为争夺最大的水源而战。给定一系列水源,用a1,a2,a3,…,an代表水源的大小。给定一组查询,每个查询包含2整数L和R,请找出L和R之间最大的水源。Input输入数据首先给定一个整数T(T≤10)表示测试用例的数量。......