2019雅礼集训Day7

雅礼集训2019 day7 Inverse 1≤n≤500,0≤k≤501 ≤ n ≤ 500,0 ≤ k ≤ 501≤n≤500,0≤k≤50, P是一个1到n的排列. 概率dpdpdp好题。 思路: 定义fi,j,kf_{i,j,k}fi,j,k​表示kkk轮变换之后api>apja_{p_i}>a_{p_j}api​​>apj​​的概率。 然后考虑对当前轮翻转的区间[l,r][l,r... 阅读详情

T1

一度以为考场上写不完…虽然最终杠完了
考虑两个位置i,ji,ji,j上的数做完kkk次操作后顺序是否变换的方案数
那么就是dp[i][j][k][0/1]dp[i][j][k][0/1]dp[i][j][k][0/1]了
对于n3kn^3kn3k的转移,枚举一下中间点是什么然后讨论
对于n2kn^2kn2k的转移,我们分几种情况讨论
分别是区间覆盖了[i,j][i,j][i,j]两个数,只覆盖了iii,只覆盖了jjj,与什么都不覆盖的
我们注意到[i,j][i,j][i,j]想要变为[x,y][x,y][x,y],翻转区间的中心是确定的
只需要知道两边边界最多有多少
那么讨论边界转移即可…
有时间把代码扔上来吧…说可能说不清

upd:来噜

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#include<queue>
#include<vector>
#include<ctime>
#include<map>
#include<bitset>
#include<set>
#define LL long long
#define mp(x,y) make_pair(x,y)
#define pll pair<long long,long long>
#define pii pair<int,int>
using namespace std;
inline int read()
{
	int f=1,x=0;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
int stack[20];
inline void write(int x)
{
	if(x<0){putchar('-');x=-x;}
    if(!x){putchar('0');return;}
    int top=0;
    while(x)stack[++top]=x%10,x/=10;
    while(top)putchar(stack[top--]+'0');
}
inline void pr1(int x){write(x);putchar(' ');}
inline void pr2(int x){write(x);putchar('\n');}
const int MAXN=501;
const int MAXK=51;
const int mod=1e9+7;

void ad(int &x,int y){x+=y;if(x>=mod)x-=mod;}
int a[MAXN],n,K;
int f[2][MAXN][MAXN][2];//0 不换位   1 换位 
int f1[MAXN][MAXN][2],f2[MAXN][MAXN][2];
int g1[MAXN][MAXN][2],g2[MAXN][MAXN][2];
int u1[MAXN][MAXN][2],u2[MAXN][MAXN][2];
int v1[MAXN][MAXN][2],v2[MAXN][MAXN][2];
//1 表示乘了i,2表示没乘i 
inline int add(int x,int y){return (x+y>=mod)?(x+y-mod):(x+y);}
inline void prenext(int nw)
{
//	memset(f1,0,sizeof(f1));memset(f2,0,sizeof(f2));
//	memset(g1,0,sizeof(f1));memset(g2,0,sizeof(f2));
//	memset(u1,0,sizeof(f1));memset(u2,0,sizeof(f2));
//	memset(v1,0,sizeof(f1));memset(v2,0,sizeof(f2));
	for(register int i=n;i>=1;--i)for(register int j=i+1;j<=n;++j)for(register int k=0;k<=1;++k)
	{
		int len=j-i;
		g1[i][len][k]=add(g1[i+1][len][k],1LL*f[nw][i][j][k]*i%mod);
		g2[i][len][k]=add(g2[i+1][len][k],f[nw][i][j][k]);
	}
	for(register int i=1;i<=n;++i)for(register int j=1;j<i;++j)for(register int k=0;k<=1;++k)
	{
		int len=i-j;
		f1[i][len][k]=add(f1[i-1][len][k],1LL*f[nw][j][i][k]*(n-i+1)%mod);
		f2[i][len][k]=add(f2[i-1][len][k],f[nw][j][i][k]);
	}
	for(register int i=1;i<=n;++i)for(register int j=i-1;j>=1;--j)for(register int k=0;k<=1;++k)
	{
		int len=i-j;
		u1[i][j][k]=add(u1[i][j+1][k],1LL*f[nw][j][i][k]*j%mod);
		u2[i][j][k]=add(u2[i][j+1][k],f[nw][j][i][k]);
	}
	for(register int i=1;i<=n;++i)for(register int j=n;j>i;--j)for(register int k=0;k<=1;++k)
	{
		int len=j-i;
		v1[i][j][k]=add(v1[i][j+1][k],1LL*f[nw][i][j][k]*j%mod);
		v2[i][j][k]=add(v2[i][j+1][k],f[nw][i][j][k]);
	}
}
inline int calc(int u)
{
	if(u<1)return 0;
	return 1LL*u*(u+1)/2%mod;
}
int pow_mod(int a,int b)
{
	int ret=1;
	while(b)
	{
		if(b&1)ret=1LL*ret*a%mod;
		a=1LL*a*a%mod;b>>=1;
	}
	return ret;
}
int main()
{
	freopen("inverse.in","r",stdin);
	freopen("inverse.out","w",stdout);
	n=read();K=read();
	for(register int i=1;i<=n;i++)a[i]=read();
	for(register int i=1;i<=n;++i)for(register int j=1;j<=n;++j)f[0][i][j][0]=1;
	prenext(0);int nw=0;
	for(register int T=1;T<=K;++T)
	{
		nw^=1;memset(f[nw],0,sizeof(f[nw]));
		for(register int i=1;i<=n;++i)for(register int j=i+1;j<=n;++j)for(register int k=0;k<=1;++k)
		{
			int len=j-i;
			//先弄区间在左边的
			int lim=n-j+1;
			if(lim<=i)ad(f[nw][i][j][k],1LL*(g2[lim][len][k^1]-g2[i+1][len][k^1]+mod)%mod*lim%mod);
			ad(f[nw][i][j][k],(g1[1][len][k^1]-g1[min(lim,i+1)][len][k^1]+mod)%mod);
			//再弄区间在右边的
			lim=i;
			if(n-lim+1>j)ad(f[nw][i][j][k],1LL*(f2[n-lim+1][len][k^1]-f2[j][len][k^1]+mod)%mod*lim%mod); 
			ad(f[nw][i][j][k],(f1[n][len][k^1]-f1[max(n-lim+1,j)][len][k^1]+mod)%mod);
			//弄只变了左边位置的 
			
			//在i左边(包括i 
			lim=j-i;
			if(lim<=i)ad(f[nw][i][j][k],1LL*(u2[j][lim][k]-u2[j][i+1][k]+mod)%mod*lim%mod);
			ad(f[nw][i][j][k],(u1[j][1][k]-u1[j][min(lim,i+1)][k]+mod)%mod);
			//在i右边 
			int o=j-1;
			lim=i;
			if(o-lim+1>i)ad(f[nw][i][j][k],1LL*(u2[j][i+1][k]-u2[j][o-lim+2][k]+mod)%mod*lim%mod);
			ad(f[nw][i][j][k],(1LL*u2[j][max(o-lim+2,i+1)][k]*(o+1)%mod-u1[j][max(o-lim+2,i+1)][k]+mod)%mod);
		
			//在j右边(包括j 
			lim=j-i;
			if(n-lim+1>=j)ad(f[nw][i][j][k],1LL*(v2[i][j][k]-v2[i][n-lim+2][k]+mod)%mod*lim%mod);
			ad(f[nw][i][j][k],(1LL*v2[i][max(n-lim+2,j)][k]*(n+1)%mod-v1[i][max(n-lim+2,j)][k]+mod)%mod);
			
			o=i+1;lim=n-j+1;
			if(o+lim-1<j)ad(f[nw][i][j][k],1LL*(v2[i][o+lim-1][k]-v2[i][j][k]+mod)%mod*lim%mod);
			ad(f[nw][i][j][k],((v1[i][i+1][k]-v1[i][min(o+lim-1,j)][k]+mod)%mod-1LL*(v2[i][i+1][k]-v2[i][min(o+lim-1,j)][k]+mod)%mod*(o-1)%mod+mod)%mod);
			
			ad(f[nw][i][j][k],1LL*f[nw^1][i][j][k]*(calc(i-1)+calc(j-i-1)+calc(n-j))%mod);
		}
		prenext(nw);
	}
	int ans=0;
	for(register int i=1;i<=n;++i)for(register int j=i+1;j<=n;++j)
	{
		if(a[i]<a[j])ad(ans,f[nw][i][j][1]);
		else ad(ans,f[nw][i][j][0]);
	}
	LL inv=pow_mod(1LL*n*(n+1)/2%mod,mod-2);
	inv=pow_mod(inv,K);
	pr2(1LL*ans*inv%mod);
	return 0;
}

**T2

打表题不会做…
朴素f(i,j)f(i,j)f(i,j)表示前iii个数长度为jjj的子序列最大值
转移就是f(i,j)=max(f(i−1,j),f(i−1,j−1)+a[i]∗j)f(i,j)=max(f(i-1,j),f(i-1,j-1)+a[i]*j)f(i,j)=max(f(i−1,j),f(i−1,j−1)+a[i]∗j)
打表发现对于每个iii,取第二种转移的是连续一段后缀
那么splay维护dp值的差分
一次只需要插入一个a[i]∗ka[i]*ka[i]∗k并且给后面的全部打上加a[i]a[i]a[i]的标记

T3

误认为面积不能推下去所以…自闭了
一个显然的想法就是我们按逆时针扫点,这样可以去掉叉积的绝对值
我们还需要去掉面积差的绝对值,那就强行让选中的一片区域是较小的那个
那么一个点能选择编号最远的那个点是单调的
我们可以维护一段区间内的多边形面积和
容易发现,对于以kkk号点为序号最大点的多边形,他少了的面积是三角形pi,pi+1,pkp_i,p_{i+1},p_kpi​,pi+1​,pk​的面积
推一下叉积,以下坐标以下标作为编号
(xi+1−xi)(yk−yi)−(xk−xi)∗(yi+1−yi)(x_{i+1}-x_i)(y_k-y_i)-(x_k-x_i)*(y_{i+1}-y_i)(xi+1​−xi​)(yk​−yi​)−(xk​−xi​)∗(yi+1​−yi​)
xi+1yk−xi+1yi−xiyk+xiyi−xkyi+1+xkyi−xiyi+xiyi+1x_{i+1}y_k-x_{i+1}y_i-x_iy_k+x_iy_i-x_ky_{i+1}+x_ky_i-x_iy_i+x_iy_{i+1}xi+1​yk​−xi+1​yi​−xi​yk​+xi​yi​−xk​yi+1​+xk​yi​−xi​yi​+xi​yi+1​
yi(xk−xi+1)+yi+1(xi−xk)+yk(xi+1−xi)y_i(x_k-x_{i+1})+y_{i+1}(x_i-x_k)+y_k(x_{i+1}-x_i)yi​(xk​−xi+1​)+yi+1​(xi​−xk​)+yk​(xi+1​−xi​)
可以前缀和优化了

雅礼集训2019 Day2 two 考场写了一个神奇的树链剖分过了??? 我的做法简单来讲就是按照题意模拟,对于一条边求出它在另一棵树上可以banbanban掉的边,然后对于每条重链开vectorvectorvector线段树维护可以删掉的边,修改的时候参考标记永久化即可。 时间复杂度摊下来是O(nlogn2)O(nlogn^2)O(nlogn2) 本来一点都不毒瘤但本地测大数据的时候会爆栈于是写了个bfs版的 代码: #... 阅读详情

相关推荐

雅礼集训2019 day5

matrix n∗m≤5e5,1≤ai,j≤1e9n*m≤5e5,1≤a_{i,j}≤1e9n∗m≤5e5,1≤ai,j​≤1e9 一道很妙的题。 首先大家应该都会无脑的O(nm2)dpO(nm^2)dpO(nm2)dp,即我们固定左右端点和之间的字符串SSS,从上往下扫计算每一行的贡献,对于第iii行的串SiS_iSi​,我们设上一个出现的满足Sj=SiS_j=S_iSj​=Si​的位置为jj...

苟为蒟蒻又何妨 406

2019雅礼集训day7 题解

day7

远行客 714

雅礼集训2019 Day1

three bzoj原题 就是一道dpdpdp状态很妙的长链剖分优化dpdpdp。 permutation 毒瘤题。 n,k≤1e5n,k\le1e5n,k≤1e5 考试的时候只写了k≤2k\le2k≤2的部分分。 下来直接OrzOrzOrz题解了。 勉强看懂大概是这样的。 首先显然可以将AAA升序排序,然后当PPP数组降序排列的时候显然是最小的(排序不等式) 然后现在我们将问题转化为PPP数...

苟为蒟蒻又何妨 624

雅礼省选集训游记(6月20日——6月28日)

Day 1   7:05 我在学校正门前晃荡了一会,结果并没有发现任何机房人员,差点虚了,赶紧想了想确实李总说的是七点一十在正门集合,难道我来早了?于是果断去了下小卖部,买了瓶柠檬茶压压惊。   7:08出了小卖部,终于发现了大鸡哥和KKK,过一会儿李总来了,把我们带出了校吃早餐,随便买个面包塞了一下。   7:21终于大家都从学校出来了,感觉等了蛮久,途中下雨,我穿网鞋,几乎湿透。...

weixin_30781775的博客 406

【雅礼集训2017】Day2 棋盘游戏

【雅礼集训2017】Day2 棋盘游戏题面: Alice 和 Bob 在玩一个游戏,给出一张 n×mn \times m 的棋盘,上面有一些点是障碍,游戏的开始,Alice 选定棋盘上任意一个不是障碍的格子,并且将一枚棋子放在其中,然后 Bob 先手,两人轮流操作棋子,每次操作必须将棋子从当前位置移动到一个相邻的无障碍且未经过的格子(即每个格子不允许经过两次),不能操作的人输,如果两人都按照最优策略

Allice 2148

windows10下 iperf3测试带宽

客户端输入:"iperf3.exe -u -c 服务器IP地址 -b 5g" //客户端给服务器发送udp数据包,最大带宽为5g。客户端输入:“iperf3.exe -c 服务器IP地址 -P 10“//表示客户端10路并行给服务器发送TCP包;上图可知:带宽是15Gbps(这里不知道为什么下面测试的UDP会比这里TCP慢 按道理UDP不可能比TCP慢的5.)3. 验证是否下载成功,在打开的窗口中输入“iperf3.exe -v”,会出现安装的版本,表示安装成功了。5. iperf3参数。

xiaoqixiaoguai的博客 5891

雅礼集训2019 D7T2 Subsequence

雅礼集训2019 D7T2 Subsequence 直接贴题解: 平衡树代码: #include<bits/stdc++.h> #define ll long long #define N 100005 using namespace std; inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||c...

weixin_34221073的博客 312

i茅台APP加密参数逆向分析:MT-Device-ID与mt-v生成算法

在移动应用安全领域,参数加密是防止API滥用的重要手段。通过对通信协议的逆向分析,可以揭示加密参数的生成原理,这对理解移动应用安全机制具有重要意义。以i茅台APP为例,其关键接口使用了MT-Device-ID和mt-v两个加密参数,前者基于设备硬件信息生成,后者则通过动态签名机制确保请求时效性。这类技术广泛应用于电商、金融等需要高安全性的场景。通过抓包工具和逆向工程手段,可以还原出从设备指纹生成到动态签名的完整技术链条,其中涉及MD5、SHA256等常见哈希算法的应用。掌握这些加密参数的生成逻辑,不仅有助于

weixin_28568819的博客 320

雅礼集训总结

这个总结也是咕了一周(准备初赛去啦)所以可能有的地方有些奇奇怪怪的问题qwq Day1 杂题选讲: 有几个题印象比较深刻。 1.平面加点,删点,询问多少个点关于(0,0)(x,y)连线对称。 发现对称的话两个点位于以(0,0)为圆心的圆上,所以暴力维护。这个复杂度是O(nsqrtnlgn)。实际上是跑不满的。 2.给定x,p。每次x可以+1,-1,变成关于p的逆元(全部模意义下),请构...

weixin_34283445的博客 340

【STK】手把手教你利用STK进行覆盖分析05-方位覆盖分析、覆盖网络检查工具和单对象覆盖分析

这一篇是我们STK覆盖模块的理论部分的最后一篇文章,之后会找尽可能多的论文来复现论文中关于STK覆盖模块的仿真的部分,到时候大家遇到不会的就可以结合前面的理论部分来看。

weixin_44184852的博客 1493

Python 爬虫实战:爬取今日头条文章与阅读量数据

本文详细介绍了基于Python爬取今日头条文章与阅读量数据的完整方案。通过分析今日头条API接口,采用Requests+正则表达式技术实现数据抓取,重点解决加密参数构造、请求头模拟、反爬规避等核心问题。文章包含文章列表获取、详情数据提取、互动数据采集等完整流程,并提供数据存储与基础分析方法。同时强调合规使用爬虫技术,控制爬取频率,避免干扰平台运营。该方案可为内容传播分析、用户兴趣研究提供数据支持,但需注意接口参数更新和反爬机制变化,适时调整代码实现。

2503_91057718的博客 2519

【2019.1雅礼集训 DAY1 T2】permutation(可持久化线段树)

题意 给出nnn个数AiA_iAi​ 定义排列一个 1~n 的排列 P 的价值为: ∑i=1nAi×Pi\sum_{i=1}^n A_i\times P_ii=1∑n​Ai​×Pi​ 求出排列价值前kkk小的kkk个排列的价值。 ...

CaptainChen的博客 634

Python 爬虫实战:爬取股票数据做 K 线图可视化

摘要:本文介绍基于Python的股票数据爬取与K线图可视化全流程技术方案。通过Requests库抓取东方财富网股票数据,使用Pandas进行清洗处理,并利用mplfinance库实现专业K线图绘制。文章详细讲解了数据爬取接口分析、反爬策略配置、K线图绘制方法(包含基础K线图和带均线的进阶版本),以及核心统计指标计算。该方案可应用于股票价格趋势分析,为投资决策提供数据支持,同时强调了数据使用的合规性和技术优化方向。

2503_91057718的博客 2049

「6月雅礼集训 2017 Day2」B

【题目大意】 求n*n的棋盘,每行每列都有2个黑格子的方案数。 n<=10^7 【题解】 zzq的做法好神奇啊 行列建点,二分图 左边有i个点,右边有j个点的方案数 f[i,j] 左边有i个点,2个已经有1个度,右边有j个点的方案数 g[i,j] g[i,j] = f[i-2,j-1]*j + g[j,i-2]*P(j,2) f[i,j] = g[i,j-1] *...

aklm45097的博客 195

微信小程序 - 最新获取用户昵称 / 头像(wx.getUserProfile 接口被废弃后的代替方案)详细教程,2022 年之后的所有微信小程序,获取用户信息最新详细教程,附带示例源代码

微信小程序wx.getUserProfile接口废了用什么代替,微信小程序wx.getUserProfile不能用了怎么办,wx.getUserProfile失效有什么替代方案吗,微信新规定头像昵称填写最新教程,目前微信小程序最新获取用户头像昵称教程,微信小程序用户头像昵称获取规则调整公告,2022改版后的微信小程序如何获取用户头像和昵称信息,微信小程序官方废弃getUserProfile后如何实现获取用户信息,微信小程序wx.getUserProfile接口返回了默认头像昵称,微信小程序获取用户信息不

🏆 前端领域优质创作者 2万+

【第24例】华为 IPD 体系 | RMT 需求管理团队

RMT需求管理团队

产品线负责人 1766

2019年3月训练记录(3.01~3.23)

前言 \(ZJOI2019\)的赛前停课集训在本周开始了(说起来也只上了一周文化课)。 虽说今年省选只是去打酱油的,但还是要好好准备一下的吧! \(Mar\ 1st\) 今天学了一下\(NTT\),做了一道较模板的题目:【BZOJ4555】[TJOI2016&HEOI2016] 求和。 \(Mar\ 2nd\) 今天有一场线下比赛。 \(T1\)花了很久去做,想出来一个容斥的做法,即用不...

weixin_30600197的博客 313

第1集:认识 Claude Code —— AI 编程新纪元

1. 定义 Claude Code:终端中的 AI 编程代理Claude Code 是 Anthropic 公司于 2025 年 5 月正式推出的命令行 AI 编程工具,它不只是一个代码补全工具,而是一个能够理解项目、自主执行任务的**终端 AI 代理(Agent)。它的核心理念是 **"生于终端,活于终端"** (lives in your terminal)。与深度嵌入图形界面(GUI)的工具不同,Claude Code 选择直接融入开发者最原始、最核心的工作环境——命令行。

dianziyao_的博客 865

LOJ#6504. 「雅礼集训 2018 Day5」Convex(回滚莫队)

题面 传送门 题解 因为并不强制在线,我们可以考虑莫队 然而莫队的时候有个问题,删除很简单,除去它和前驱后继的贡献即可。但是插入的话却要找到前驱后继再插入,非常麻烦 那么我们把它变成只删除的回滚莫队就好了 不知道回滚莫队的可以看看这里 //minamoto #include<bits/stdc++.h> #define R register #define ll long long #...

weixin_34266504的博客 235

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

2019雅礼集训day2 题解

day2

远行客 1052

LOJ 6495~6497「雅礼集训 2018 Day1」

. 真是看懂std就秒的三道题,但是看懂就很难啊 (感谢superguymj和memset0两个大佬的代码) 稍微说一下题解 -------------------------------------------------------- 「雅礼集训 2018 Day1」树 这道题的正解被superguymj大佬吊打了,原来O(n⋅2n)O(n·2^n)O(n⋅2n)变成了O(n4)O(n^4)...

扩展の灰(Extended Ash/Cooevjnz) 1562

「雅礼集训 2017 Day7」跳蚤王国的宰相(树的重心)

调试八个月,XYX终于战胜了跳蚤宰相

DD(XYX)的硫氰化氘博客 502

loj6035「雅礼集训 2017 Day4」洗衣服

题目 「雅礼集训 2017 Day4」洗衣服 题解 先单独考虑洗和烘干,问题简化为一个非常简单的贪心:每次选择处理完这件衣服总耗时最短的机器,可以堆维护 再考虑将其结合。衣服需要先洗再烘,所以烘干所有衣服的时刻必然在洗完衣服的时刻之后 aw[i], ad[i] 分别记录洗完,烘干i件衣服的耗时 t取max就可以了 注意long long 代码 #include <bits/std...

David1950的博客 409

#6029. 【雅礼集训 2017 Day1】市场

#6029. 「雅礼集训 2017 Day1」市场 题目描述 从前有一个贸易市场,在一位执政官到来之前都是非常繁荣的,自从他来了之后,发布了一系列奇怪的政令,导致贸易市场的衰落。 有 n nn 个商贩,从 0∼n−1 0 \sim n - 10∼n−1 编号,每个商贩的商品有一个价格 ai a_ia​i​​,有两种政令: l,r,c l, r, cl,r,c,对于 i∈

Follow My Heart 1093

LibreOJ 6499. 「雅礼集训 2018 Day2」颜色【分块+bitset+ST表+卡常】

6499. 「雅礼集训 2018 Day2」颜色 【题目描述】 传送门 【题解】 分块+bitset+ST表+卡常 对于序列分块,每块用bitset存起来,然后用ST表预处理bitset的合并,然后就是一道卡常题了。 代码如下 #include<cmath> #include<cstdio> #include<...

aiweiluan5095的博客 391
上一篇: 2019雅礼集训Day2
下一篇: 2019雅礼集训Day8
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值