首页 > 其他分享 >20240221比赛总结

20240221比赛总结

时间:2024-02-23 14:48:07浏览次数:32  
标签:总结 f1 比赛 int 20240221 ll fa res dp

T1 排序

https://gxyzoj.com/d/hzoj/p/3610

根据代数的内容,容易得到:若\(a\ge b\ge c\ge d\),则有
\(ab-cd\ge ac-bd\ge ad-bc\)

所以,只需要前2n个一大一小搭配,后2n个两两搭配,即为答案

代码:

#include<cstdio>
#include<algorithm>
#define ull unsigned long long
using namespace std;
int n,a[400005];
ull ans;
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n*4;i++)
	{
		scanf("%d",&a[i]);
	}
	sort(a+1,a+4*n+1);
	for(int i=1;i<=n;i++)
	{
		long long x=1ll*a[2*n+2*i-1]*a[2*n+2*i]-1ll*a[i]*a[2*n-i+1];
		ans=ans+x;
	}
	printf("%llu",ans);
	return 0;
}

T2 牛吃草

https://gxyzoj.com/d/hzoj/p/3611

考虑二分答案,因为size具有单调性,所以可以二分size的最小值,check函数由dp实现,设\(f_i\)表示满足最小覆盖大小的情况下,前i个点的最大覆盖数,所以,可得转移方程:

\[f_i=\max_{i-w_i\le j\le i-size}(f_{i-1},f_j+i-j) \]

因为题目中w[i]的限制条件,i不变,所以可以用单调队列维护\(f_j-j\)的最大值

代码:

#include<cstdio>
#include<algorithm>
using namespace std;
int n,a[500005],f[500005],q[500005],head,tail,pos,ans;
bool check(int size)
{
	head=1,tail=1;
	for(int i=0;i<=n;i++)
	{
		f[i]=q[i]=0;
	}
	q[tail]=0;
//	printf("\n%d\n",size);
	for(int i=1;i<=n;i++)
	{
		f[i]=f[i-1];
		if(i-size>=0)
		{
			int x=i-size;
			while(head<=tail&&f[q[tail]]-q[tail]<=f[x]-x) tail--;
			q[++tail]=x;
		}
		while(head<=tail&&q[head]<i-a[i]) head++;
		if(a[i]>=size)
		{
			if(head<=tail)
			f[i]=max(f[i-1],i+f[q[head]]-q[head]);
		}
	//	printf("%d ",f[i]);
	}
//	if(size==250000) printf("%d\n",f[n]);
	if(f[n]>=pos) return 1;
	return 0;
}
int main()
{
//	freopen("testcase20.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		if(a[i]>i) a[i]=i;
	}
	int s;
	scanf("%d",&s);
	pos=(n*s+99)/100;
	int l=1,r=n;
	while(l<=r)
	{
		int mid=(l+r)>>1;
		if(check(mid))
		{
			ans=max(ans,mid);
			l=mid+1;
		}
		else
		{
			r=mid-1;
		}
	}
//	check(250000);
	printf("%d",ans);
	return 0;
}

T3 树上的宝藏

https://gxyzoj.com/d/hzoj/p/3612

很像暑假的一道题:P6419

换根DP,我们假设1为根,做树形dp,设\(dp_{u,0/1}\)表示u不选/选时u子树内的方案数,易得转移方程:

\[\begin{cases}dp_{u,0}=\prod_{v\in son(u)}(dp_{v,0}+dp_{v,1})\\ dp_{u,1}=\prod_{v\in son(u)}dp_{v,0}\end{cases} \]

因为要换根,所以还要记录子树外的方案数,设\(f_{u,0/1}\)表示u不选/选时u子树外的方案数,转移方程为:

\[\begin{cases}f_{u,0} = dp_{fa,0} \div (dp_{u,0}+dp_{u,1}) \times f_{fa,0} + dp_{fa,1} \div dp_{u,0} \times f_{fa,1} \\ f_{u,1} = dp_{fa,0} \div (dp_{u,0}+dp_{u,1}) \times f_{fa,0} \end{cases} \]

接着考虑统计答案,在dfs的同时,统计深度,对于每一条边,记深度小的节点为u,深度大的为v,所以有三种情况:

只选u:

res=dp[u][1]*f[u][1]%p;

u,v都选:

res=f[u][1]*dp[u][1]%p;
res=res*qpow(dp[v][0]%p,p-2)%p*dp[v][1]%p

只选v:

res=dp[u][0]*f[u][0]%p;
res=res*qpow((dp[v][0]+dp[v][1])%p,p-2)%p*dp[v][1]%p;

注意取模!注意取模!注意取模!

(100->30)

完整代码(考后改的):

#include<cstdio>
#include<algorithm>
#define ll long long
using namespace std;
const int p=998244353;
int n,edgenum,head[300005],x[300005],y[300006];
struct edge{
	int to,nxt;
}e[600005];
void add(int u,int v)
{
	e[++edgenum].nxt=head[u];
	e[edgenum].to=v;
	head[u]=edgenum;
}
ll f1[300005][2],f2[300005][2],f[300005];
int dep[300005];
ll qpow(ll x,int y)
{
	ll res=1;
	while(y)
	{
		if(y&1) res=res*x%p;
		x=x*x%p;
		y>>=1;
	}
	return res;
}
void dfs(int u,int fa)
{
	dep[u]=dep[fa]+1;
	f[u]=fa;
	f1[u][0]=f1[u][1]=1;
	for(int i=head[u];i;i=e[i].nxt)
	{
		int v=e[i].to;
		if(v==fa) continue;
		dfs(v,u);
	//	printf("%d %d\n",u,v);
		f1[u][1]=f1[u][1]*f1[v][0]%p;
		f1[u][0]=f1[u][0]*(f1[v][0]+f1[v][1])%p;
	}
}
void dfs1(int u,int fa)
{
	ll s=f2[u][0],t=f2[u][1];
	for(int i=head[u];i;i=e[i].nxt)
	{
		int v=e[i].to;
		if(v==fa) continue;
		s=s*(f1[v][0]+f1[v][1])%p;
		t=t*f1[v][0]%p;
	}
	for(int i=head[u];i;i=e[i].nxt)
	{
		int v=e[i].to;
		if(v==fa) continue;
		ll s1=s*qpow((f1[v][0]+f1[v][1])%p,p-2)%p,t1=t*qpow(f1[v][0],p-2)%p;
		f2[v][0]=(s1+t1)%p;
		f2[v][1]=s1;
		dfs1(v,u);
	}
}
ll query1(int u,int v)
{
	ll res=f2[u][1]*f1[u][1]%p;
	return res%p;
}
ll query2(int u,int v)
{
	ll res=f2[u][1]*f1[u][1]%p;
	res=res*qpow(f1[v][0]%p,p-2)%p*f1[v][1]%p;
	return res%p;
}
ll query3(int u,int v)
{
	ll res=f2[u][0]*f1[u][0]%p;
	res=res*qpow((f1[v][0]+f1[v][1])%p,p-2)%p*f1[v][1]%p;
	return res%p;
}
int main()
{
	scanf("%d",&n);
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&x[i],&y[i]);
		add(x[i],y[i]);
		add(y[i],x[i]);
	}
	dfs(1,0);
	f2[1][1]=f2[1][0]=1;
	dfs1(1,0);
	for(int i=1;i<n;i++)
	{
		if(dep[x[i]]>dep[y[i]]) swap(x[i],y[i]);
		printf("%lld\n",(query1(x[i],y[i])+query2(x[i],y[i])+query3(x[i],y[i]))%p);
	}
	return 0;
}

T4 MEX

https://gxyzoj.com/d/hzoj/p/3613

有人会吗,蒟蒻求教T_T

标签:总结,f1,比赛,int,20240221,ll,fa,res,dp
From: https://www.cnblogs.com/wangsiqi2010916/p/18029471

相关文章

  • 读千脑智能笔记13_读后总结与感想兼导读
    1. 基本信息千脑智能AThousandBrains(美)杰夫·霍金斯浙江教育出版社,2022年9月出版1.1. 读薄率书籍总字数287千字,笔记总字数39938字。读薄率39938÷287000≈13.92%1.2. 读厚方向千脑智能脑机穿越未来呼啸而来虚拟人AI3.0新机器人人工不智能:计......
  • ABC341总结
    ABC341总结Score:1825Rank:737F其实按照题意,原图可能有环,但是因为转移有权值限定,转换一下就是DAG,进行拓扑排序。GAK所差最后一题,使用数形结合思想,x轴为数组下标,y轴为值域。题意是给出左端点,右端点任意,求区间平均值最大进行前缀和处理,然后会惊奇的发现,平均数转化成了两点间......
  • 2.22前总结
    2.1[CQOI2011]动态逆序对[HEOI2016/TJOI2016]序列2.2[BZOJ3730]点分树|震波(模板)2.3[ZJOI2015]幻想乡战略游戏2.42.5[HNOI2015]开店[SDOI2011]消耗战2.6考试(270pts,rk1)2.7-2.17替罪羊树2.18-2.19考试+题解2.20[SDOI2015]寻宝游戏2.21-2.22考试+题解总结:做题......
  • 每日总结
    Scala循环有的时候,我们可能需要多次执行同一块代码。一般情况下,语句是按顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推。编程语言提供了更为复杂执行路径的多种控制结构。循环语句允许我们多次执行一个语句或语句组,下面是大多数编程语言中循环语句的流程图:......
  • 2.21+2.22考试总结
    连续两天数组开小,\(D1T1\30+D2T2\60+D2T4\10\),一旦数组开大就\(A\)了\(qwq\)。Day1T1排序题目大意:给出一个长度为\(4n\)的序列\(a\),要求将其配对为\(n\)个四元组\(x_i,y_i,z_i,w_i\),求\(\max\sum\limits_{i=1}^n|x_iy_i-z_iw_i|\)。难度:三星(满分十星)发现绝......
  • abc341比赛总结
    写在开头\(2024\)年\(2\)月\(17\)日,本蒟蒻参加了平生第一场国外OJ的比赛:\(AtCoder\)\(Beginner\)\(Contest\)\(341\)。题目只有英文和日文的,显然,对于我来说,看题目都成了一个问题,所以比赛结果自然不怎么理想。各题作答情况请广大读者根据我的做题顺序依次来看各题分析......
  • 李宏毅《机器学习》总结 - RL
    引入给一张动物的图片,分辨是什么动物。这个问题可以用CNN解决(HW3)。核心是通过有标注(label)的图片进行学习。而在下围棋时,如何落子是一个难以标注的问题,但是机器可以学到什么是好的,什么是不好的。这就是强化学习的适用场景。结构总的目标是想找一个Actor(或称policy),环境(envir......
  • 正则表达式常用,自我总结
    经典实例:[1]+$由26个字母组成的字符串[2]+$由26个字母和0到9数字组成的字符串^-?\d+$整数形式字符串(复数前面有"-"号)[3][1-9][0-9]$正整数形式字符串[1-9]\d{5}中......
  • 2023年总结
    2023年:1.工作在狗东,晋升T8级别。2.在技术架构团队,一直在一线。3.输出了5+个工具或者框架,交易团队多少都有在用,输出文档N篇,内网居多,再也没有用一周写一遍像样的文章了(比较忙)。4.大部分业余时间贡献给了中医(线上性能调优搞的有点麻木了,想冲击一下人类最高智慧,颇难,2023共看了......
  • 读十堂极简人工智能课笔记09_读后总结与感想兼导读
    1. 基本信息十堂极简人工智能课10ShortLessonsinArtificialIntelligence&Robo[英]彼得·J.本特利著译林出版社,2023年5月出版1.1. 读薄率书籍总字数115千字,笔记总字数25104字。读薄率25104÷115000≈21.83%1.2. 读厚方向千脑智能脑机穿越未来呼啸而......