首页 > 其他分享 >9.23考试总结

9.23考试总结

时间:2024-09-24 16:38:49浏览次数:9  
标签:9.23 总结 return int tot hd ans 考试 mod

T1

简单签到题,考虑一个点从开头移到结尾会减去小于它的数加上大于它的数。所以 \(O(nlogn)\) 求逆序对,然后 \(O(1)\) 计算一个数移到最后的答案。

#include  <bits/stdc++.h>
using namespace std;
const int N=1e6+10;
#define ll long long
int n,a[N],sum[N],sh[N];
ll ans,jg;
int lowbit(int x)
{
	return x&(-x);
}
ll query(int x)
{
	if(x==0)return 0;
	ll c=0;
	while(x)
	{
		c+=sh[x];
		x-=lowbit(x);
	}
	return c;
}
void modify(int x,int zhi)
{
	while(x<=n)
	{
		sh[x]+=zhi;
		x+=lowbit(x);
	}
} 
int main()
{
	freopen("rotinv.in","r",stdin);
	freopen("rotinv.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]),sum[a[i]]++;
	for(int i=1;i<=n;i++)sum[i]+=sum[i-1];
	for(int i=1;i<=n;i++)
	{
		ans+=i-1-query(a[i]);
		modify(a[i],1);
	}
	jg=ans;
	for(int i=1;i<n;i++)
	{
		ans-=sum[a[i]-1];
		ans+=(sum[n]-sum[a[i]]);
		jg+=ans;
	}
	printf("%lld\n",jg);
	return 0;
 } 

估计100,实得100;

T2

一个还行的题,考虑像处理区间中只出现一次的颜色个数,记录限制它的位置(第一个大于等于它的数),用可持续化线段树维护信息,统计答案即可。

#include  <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int n,m,a[N],rot[N],s[N],pre[N],cnt,rs[N<<5],ls[N<<5],sum[N<<5],ss[N];
int modify(int l,int r,int zhi,int las)
{
	int x=++cnt;
	sum[x]=sum[las]+1,rs[x]=rs[las],ls[x]=ls[las];
	if(l==r)return x;
	int mid=(l+r)>>1;
	if(zhi<=mid)ls[x]=modify(l,mid,zhi,ls[las]);
	else rs[x]=modify(mid+1,r,zhi,rs[las]);
	return x;
}
int query(int x,int l,int r,int lt,int rt)
{
	if(r<lt||l>rt||!x)return 0;
	if(lt<=l&&rt>=r)
		return sum[x];	
	int mid=(l+r)>>1,ans=0;
	if(lt<=mid)ans+=query(ls[x],l,mid,lt,rt);
	if(rt>mid)ans+=query(rs[x],mid+1,r,lt,rt);
	return ans; 
}
int main()
{
	freopen("rise.in","r",stdin);
	freopen("rise.out","w",stdout);
	scanf("%d%d",&n,&m);
	int t=0;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		ss[i]=ss[i-1];//ss存限制为0的个数,因为线段树只存了1-r的信息。
		while(t&&a[s[t]]<a[i])t--;//等于不能弹!!!
		pre[i]=s[t];
		if(pre[i]==0)ss[i]+=1;
		s[++t]=i;
	}
	for(int i=1;i<=n;i++)
	{
		if(pre[i]==0)rot[i]=rot[i-1];//继承上一个点
		else rot[i]=modify(1,n,pre[i],rot[i-1]);//修改pre[i]的链
	}	
	for(int i=1;i<=m;i++)
	{
		int l,r;scanf("%d%d",&l,&r);
		printf("%d\n",query(rot[r],1,n,1,l-1)-l+1+ss[r]);//查询1-r中pre[i]<=l-1的个数+0的个数-(l-1)的个数。
	}
	return 0;
 } 
 /*
5 4
1 3 2 4 2
1 4
2 4
1 3
2 3
 */

估计100,实际0。
错误原因:

  1. 单调栈等于不应弹出去
  2. 可持续化线段树数据范围大于O(nlogn)。

T3

存每个点到根正着反着的数模31的值,\(u,v\)路径上可以求出lca之后组合而成。
变成倍增求lca得例题。

#include  <bits/stdc++.h>
using namespace std;
const int mod=31,N=1e5+10;
int n,m,tot,d1[N],d2[N],dep[N],f[N][30],hd[N],jz[N*2],go[N*2],nxt[N*2],pw[N],pwf[N];
void dfs(int u,int fa)
{
	f[u][0]=fa;dep[u]=dep[fa]+1;
	for(int i=1;i<=20;i++)
		f[u][i]=f[f[u][i-1]][i-1];
	for(int i=hd[u];i;i=nxt[i])
	{
		int v=go[i];
		if(v==fa)continue;	
		d1[v]=(jz[i]*pw[dep[u]-1]%mod+d1[u])%mod;
		d2[v]=(d2[u]*10%mod+jz[i])%mod;
		dfs(v,u);
	}
}
int lca(int x,int y)
{
	if(dep[x]<dep[y])swap(x,y);
	for(int i=20;i>=0;i--)
	{
		if(dep[f[x][i]]>=dep[y])x=f[x][i];
		if(x==y)return x;
	}
	for(int i=20;i>=0;i--)
	{
		if(f[x][i]!=f[y][i])
		{
			x=f[x][i];y=f[y][i];
		}
	}
	return f[x][0];
}
int ksm(int x,int y)
{
	int ans=1;
	while(y)
	{
		if(y&1)ans=(ans*x)%mod;
		y>>=1;
		x=x*x%mod;
	}
	return ans%mod;
}
void add(int x,int y,int z)
{
	nxt[++tot]=hd[x];go[tot]=y;jz[tot]=z;hd[x]=tot;
	nxt[++tot]=hd[y];go[tot]=x;jz[tot]=z;hd[y]=tot;
}
int main()
{
	freopen("seqmod.in","r",stdin);
	freopen("seqmod.out","w",stdout);
	scanf("%d%d",&n,&m);
	pwf[0]=pw[0]=1;
	int ny=ksm(10,mod-2);
//	printf("%d\n",ny);
	for(int i=1;i<=n;i++)pw[i]=pw[i-1]*10%mod,pwf[i]=pwf[i-1]*ny%mod;
	for(int i=1;i<n;i++)
	{
		int u,v,d;
		scanf("%d%d%d",&u,&v,&d);
		add(u,v,d);
	}
	dfs(1,0); 
	for(int i=1;i<=m;i++)
	{
		int u,v,la,uu,vv;scanf("%d%d",&u,&v);
		la=lca(u,v);
		uu=(d1[u]-d1[la]+mod)%mod*pwf[dep[la]-1]%mod;
		vv=(d2[v]-d2[la]*pw[dep[v]-dep[la]]%mod+mod)%mod;
		printf("%d\n",(uu*pw[dep[v]-dep[la]]%mod+vv)%mod); 
	}
	return 0;
 } 

估计0(没调出来),实得0.
错误原因:
1.ksm写错了(建议全文背诵)

标签:9.23,总结,return,int,tot,hd,ans,考试,mod
From: https://www.cnblogs.com/storms11/p/18429459

相关文章

  • 2024/09/23 模拟赛总结
    rk3,\(0+100+30+5=135\)#A.依依寺唐氏分类讨论,赛事写了个记搜爆0了因为\(0\)不会改变取得数的和,所以\(a\)可以改为\(a\bmod2\)。接下来分类讨论假设先手取\(1\),那么后手取\(2\)直接输,则一定先取\(1\),接下来先手取\(1\)又输,只能取\(2\),然后就会循环后手\(1\)......
  • 2024.9.23校测
    T1题目描述如果你有一个长度为n的序列:\(a_1,a_2,a_3,\dots,a_n\),那么它的一个逆序对是一个二元组:\(<i,j>\)满足\(i<j\)且\(a_i>a_j\),其中\(i,j\in[1,n]\)。我们称一个序列所包含的逆序对的个数为这个序列的逆序对数。那么问题来了:我给出一个长度为n......
  • 总结
    集合考虑枚举子集和,统计有多少个子集的和为当前枚举的子集和,然后我们记个结论:\(x^y=x^{y\mod(p-1)}\),然后就过了P3488一眼二分图(网络流启动),但是考虑到图很大,所以我们考虑直接判断是否是二分图,考虑一个区间,如果总数比这个区间所能承载的人都要大,那么肯定会寄,所以用线段树维......
  • 2024年数据库系统工程师考试大纲
    一、数据库系统工程师数据库系统工程师,属于计算机技术与软件(中级)专业技术资格。二、考试说明(一)考试目标通过本考试的合格人员能参与信息系统的规划、设计、构建、运行和管理,能按照用户需求,设计、建立、运行、维护数据库系统;能管理信息系统中的数据资源,建立和维护核心数据库,承担数......
  • AI大模型大厂面经——LoRA面试题最全总结
    前言大家的显卡都比较吃紧,LoRA家族越来越壮大,基于LoRA出现了各种各样的改进,最近比较火的一个改进版是dora,听大家反馈口碑也不错。基于PEFT的话用409024G显存也可以进行大模型的微调,所以LoRA家族这块还是很有研究和实际落地的潜力。LoRA整个系列分为两个部分:1、LoRA总述2、LoRA家族......
  • NOIP2024集训 Day37 总结
    前言今天的题目也是比较快速的做完了。所以先来总结一下。今天是计数专题,组合数居多。以前做过的题目这里就稍稍略过了。MergeTriplets观察到对于能够得到的最终的排列\(p\),对于其中的一个数\(p_i\),不可能做到\(p_i>\max_{j=i+1}^{i+3}p_j\)。感觉是比较显然的,这里就不......
  • Oracle 19c OCP 认证考试 082 题库(第24题)- 2024年修正版
    【优技教育】Oracle19cOCP082题库(Q24题)-2024年修正版考试科目:1Z0-082考试题量:90通过分数:60%考试时间:150min本文为(CUUG原创)整理并解析,转发请注明出处,禁止抄袭及未经注明出处的转载。原文地址:http://www.cuug.com/index.php?s=/home/article/detail/id/3410.html第......
  • 2024年系统集成项目管理工程师考试大纲
    一、系统集成项目管理工程师系统集成项目管理工程师,属于计算机技术与软件(中级)专业技术资格。二、考试说明(一)考试目标通过本考试的合格人员能够具备管理系统集成项目的能力;了解信息技术及其服务创新的相关知识;掌握信息系统集成的工程技术方法;掌握系统集成项目管理的知识体系;能够综合......
  • 2024年软件设计师考试大纲
    一、软件设计师软件设计师,属于计算机技术与软件(中级)专业技术资格。二、考试说明(一)考试目标通过本考试的合格人员能根据软件开发项日管理和软件工程的要求,按照系统总体设计规格说明书进行软件设计,编写程序设计规格说明书等相应的文档,组织和指导程序员编写、调试程序,并对软件进行优化......
  • 2024年系统分析师考试大纲
    一、系统分析师系统分析师,属于计算机技术与软件(高级)专业技术资格。二、考试说明(一)考试目标通过本考试的合格人员应熟悉应用领域的业务,能分析用户的需求和约束条件,写出信息系统需求规格说明书,制订项目开发计划,协调信息系统开发与运行所涉及的各类人员;能指导制订企业的战略数据规划......