首页 > 其他分享 >8月22日测试总结

8月22日测试总结

时间:2023-08-22 16:25:53浏览次数:32  
标签:总结 22 int maxn 测试 序列 质因数 dp mod

8月22日测试总结

最长不互质子序列

题目大意:

给定一个长度为 \(n\) 的数组,找出最长的不互质子序列(要求:相邻的两项不互质)

思路:

1、用 \(gcd\) 判断是否能够转移

\(dp[i]=max\{dp[j]+1\}(gcd(a[i],a[j])>1,i>j)\)

2、如果 \(dp[i]\) 能从 \(dp[j]\) 转移,则 \(a[i]\) 和 \(a[j]\) 定有一个相同的质因数,这个质因数的数量是很少的。考虑重新设计状态, \(dp[i]\) 设计为最长子序列,子序列的最后一个数的质因数中含有 \(i\) 的。那么对于一个数 \(x\),我们给它分解质因数,对于所有的质因数 \(y\),找到最大的一个 \(dp[mxy]\),之后把 \(dp[mxy]+1\) 更新到所有 \(dp[y]\) 中。最后枚举所有质因数即可。

3、预处理每个数字的所有质因数,每个数不同质因数的个数是 \(log\) 级别的。
这个可以在埃氏筛之类的筛法枚举质数的倍数时顺便解决。
使用邻接表之类的东西去存一下就可以了。

Code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e6+1;
int n,tot,ans;
int a[maxn];
int v[maxn*3];
int dp[maxn];
int Next[maxn*3];
int head[maxn];
int flag[maxn];
inline void inint()//埃氏筛 
{
	for(int i=2;i<=maxn;++i)
		if(!flag[i])
			for(int j=i;j<=maxn;j+=i)
			{
				flag[j]=1;
				v[++tot]=i;
				Next[tot]=head[j];
				head[j]=tot;
			}
} 
signed main()
{
	std::ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<=n;++i)cin>>a[i];
	inint();
	for(int i=1;i<=n;++i)
	{
		int mx=0;
		for(int j=head[a[i]];j;j=Next[j])mx=max(mx,dp[v[j]]);
		for(int j=head[a[i]];j;j=Next[j])dp[v[j]]=mx+1;
		ans=max(ans,mx+1);
	}
	cout<<ans<<endl;
	return 0;
}

数学课

题目大意:

给定一个长度为 \(n\) 的序列 \(A\),在相邻两数之间可以填上 \(+,-,\times\) 三种符号,并且有 \(m\) 次操作,可以将 \(a_x\) 改为 \(y\) 。问每次修改后,所有可能的序列的答案之和,\(mod\) 1000000007 后输出

思路:

首先,因为乘法的优先性,我们可以将一串乘在一起的元素看作一个元素。

然后,由于要求的是所有可能的序列的答案之和,显然,对于一个位置,在不考虑乘法的情况下,一个位置可以是加或者减,加减抵消。那如果有乘法呢?用到上面的假设“因为乘法的优先性,我们可以将一串乘在一起的元素看作一个元素”,所以也可以抵消。

这时,我们发现,唯一一个前面没有符号,也就是不能抵消的元素是 \(a[1]\)。那么最终对答案的贡献就是每种情况下从 \(a[1]\) 开始的乘法的积(因为加减抵消),也就是前缀积。

考虑用线段树维护前缀积,每次操作影响的只会是 \(x-n\) ,这就是线段树的赋值区间。既然我们将原本的 \(a_x\) 改为了 \(y\),那么,我们就需要除掉 \(a[x]\) 乘以 \(y\)。在模一个数的意义下,除以一个数就是乘上这个数的逆元,这就是赋的值。

Code:

#include<bits/stdc++.h>
#define int long long
using namespace std;
const int maxn=1e5+1;
const int mod=1e9+7;
struct node
{
	int tag,v;
}tree[maxn<<2];
int n,m;
int a[maxn];
int b[maxn];//前缀积 
int d[maxn];//前缀积*出现次数(线段树维护对象) 
int mul[maxn];//出现次数 
inline int power(int x,int y)
{
	int sum=1;
	while(y)
	{
		if(y&1)sum=(sum*x)%mod;
		x*=x;x%=mod;y>>=1; 
	}
	return sum;
}
inline void pushup(int i){tree[i].v=(tree[i<<1].v+tree[i<<1|1].v)%mod;}
inline void pushdown(int i)
{
	if(tree[i].tag==1)
		return;
	tree[i<<1].v=(tree[i<<1].v*tree[i].tag)%mod;
	tree[i<<1|1].v=(tree[i<<1|1].v*tree[i].tag)%mod;
	
	tree[i<<1].tag=(tree[i<<1].tag*tree[i].tag)%mod;
	tree[i<<1|1].tag=(tree[i<<1|1].tag*tree[i].tag)%mod;
	
	tree[i].tag=1;
	return;
}
inline void build(int i,int l,int r)
{
	if(l==r)
	{
		tree[i].v=d[l];
		tree[i].tag=1;
		return;
	}
	int mid=(l+r)>>1;
	build(i<<1,l,mid);
	build(i<<1|1,mid+1,r);
	pushup(i);
	tree[i].tag=1;
}
inline void change(int i,int l,int r,int L,int R,int v)
{
	if(R<l||r<L)
		return;
	if(L<=l&&r<=R)
	{
		(tree[i].v*=v)%=mod;
		(tree[i].tag*=v)%=mod;
		return;
	}
	pushdown(i);
	int mid=(l+r)>>1;
	change(i<<1,l,mid,L,R,v);
	change(i<<1|1,mid+1,r,L,R,v);
	pushup(i);
}
signed main()
{
	std::ios::sync_with_stdio(false);
	cin>>n>>m;
	mul[0]=2;
	b[0]=1;
	for(int i=1;i<=n;++i)mul[i]=mul[i-1]*3%mod;
	for(int i=1;i<=n;++i)cin>>a[i];
	for(int i=1;i<n;++i)
	{
		b[i]=b[i-1]*a[i]%mod;
		d[i]=b[i]*mul[n-i-1]%mod;
	}
	d[n]=b[n]=b[n-1]*a[n]%mod;//最后一个特殊处理
	build(1,1,n);
	while(m--)
	{
		int x,y;
		cin>>x>>y;
		change(1,1,n,x,n,y*power(a[x],mod-2)%mod);
		a[x]=y;
		cout<<tree[1].v<<endl;
	}
	return 0;
}

标签:总结,22,int,maxn,测试,序列,质因数,dp,mod
From: https://www.cnblogs.com/PenguinChen/p/17648801.html

相关文章

  • 2023.8.22
    有点超模了。签完到跑路。记下做法。T2有字符串\(S\),\(T\),且\(|S|=n\),\(|T|=m\),均由小写字母构成。一个匹配指\(T\)作为子序列在\(S\)中出现,记匹配位置为\(pos_1,pos_2,\dots,pos_m\),该匹配的权值为\(\displaystyle\sum_{i=1}^{m}A_{pos_i}\).每次问\(S[l:r]\)与\(......
  • 带你读论文丨Fuzzing漏洞挖掘详细总结 GreyOne
    本文分享自华为云社区《[论文阅读](03) 清华张超老师 -Fuzzing漏洞挖掘详细总结 GreyOne》,作者: eastmount。一.传统的漏洞挖掘方法演讲题目: 数据流敏感的漏洞挖掘方法内容摘要: 模糊测试近年来成为安全研究人员的必备的漏洞挖掘工具,是近年来漏洞披露数量爆发的重要推手......
  • 2023-08-22:请用go语言编写。给定一个长度为N的正数数组,还有一个正数K, 返回有多少子序
    2023-08-22:请用go语言编写。给定一个长度为N的正数数组,还有一个正数K,返回有多少子序列的最大公约数为K。结果可能很大,对1000000007取模。1<=N<=10^5,1<=arr[i]<=10^5。来自腾讯笔试。来自左程云。答案2023-08-22:算法过程分步描述如下:1.初始化数组dp、cnt和pow2,长度为MAX......
  • 最完美WIN11_Pro_23H2.22631.2199软件选装纯净版VIP51.9
    【系统简介】=============================================================1.本次更新母盘来自UUP_WIN11_Pro_23H2.22631.2199。进一步精简优化调整。2.只为呈现最好的作品,手工精简优化部分较多。3.OS版本号为22631.2199。个别要求高的就下MSDN吧,里面啥功能都有。4.集成《DrvCeo......
  • 8.22集训笔记
    上午简单排序P5143攀爬者点击查看代码#include<bits/stdc++.h>usingnamespacestd;constintN=5e4+10;structT{intx,y,z;}a[N];boolcmp(Ta,Tb){returna.z<b.z;//返回是否合法,或者说是否不需要交换}doubledis(inti,intj){returnsq......
  • 0×03 Vulnhub 靶机渗透总结之 KIOPTRIX: LEVEL 1.2 (#3) SQL注入+sudo提权
    0×03Vulnhub靶机渗透总结之KIOPTRIX:LEVEL1.2(#3)......
  • 软件测试|Git环境安装与配置指南
    简介Git是一个分布式版本控制系统,广泛用于团队协作开发和个人项目管理。相比于CVS和Subversion等传统的代码管理工具,因为采取了分布式的版本库,因此不需要服务端软件支持,Git也成为了大家进行版本控制的首选。在本文中,我们将为介绍Git的安装和配置,以便大家可以开始使用Git来管理我们......
  • GB28181国标平台测试软件NTV-GBC(包含服务器和模拟客户端)
    GB28181国标平台测试软件NTV-GBC用于对GB28181国标平台进行测试(测试用例需要服务器软件,服务器软件可以是任何标准的国标平台,我们测试使用的是NTV-GBS),软件实现了设备注册、注销、目录查询,消息订阅、INVITE,BYE、KEEPLIVE、OPTION信令。本文档介绍的模拟软件的使用方法。首先下载GBC......
  • 【校招VIP】测试专业课之TCP/IP模型
    考点介绍:大厂测试校招面试里经常会出现TCP/IP模型的考察,TCP/IP协议是网络基础知识,但是在校招面试中很多同学在基础回答中不到位,或者倒在引申问题里,就丢分了。一、考点题目1.TCP是网络传输的常用协议,下面为TCP的描述,哪项是不正确的()A.TCP提供一种面向连接的、可靠的字节流服务......
  • LDAP:如何在windows系统下安装LDAP及连接测试
    1、LDAP介绍LDAP是一个基于X.500标准的轻量目录访问协议,与X.500不同,LDAP协议支持TCP/IP连接。全称为LightweightDirectoryAccessProtocol(轻量目录访问协议),是用户、设备和客户端与目录服务器通信的标准协议。LDAP协议帮助用户对IT资源进行身份验证和授权,这些资源包括服务器、应......