HZOI20190714 T1序列

博客围绕等比序列子序列分类问题展开,分q=1和q!=1两种情况讨论。q=1时找最长相等子串;q!=1时,序列最长为logn,需枚举开头,确定最小公比,判断后续数能否加入,还需避免重复数。此外还提及大佬暴力卡数据解题及复杂度等内容。

什么沙雕题啊……考察的是啥啊,分类咋搞啊……愁死我了……

先把作者的正解放出来:

序列
因为选出的一段是一个等比序列的子序列,我们分为两种情况:
1. q=1,相当于找一个最长每个数都相等的子串,这个扫一遍就行了。
2. q!=1,那么这个序列最长只有 logn,那么我们可以枚举开头,不妨设开始的两个数为 a[i]和 a[i+1],
其中比较大的一个为 x,另一个 y。
(1) 首先要满足 x%y=0
(2) 让 z=x/y,然后把 z 质因数分解,z=p1^q1*p2^q2*p3^q3......,设 g=gcd(q1,q2,q3...),那么当前序
列的最小公比就是 p1^(q1/g)*p2^(q2/h)*......
(3) 我们找到最小公比后,每当往后加一个数,判断它与前边的数的比是否是最小公比的整次幂,
不是的话就说明不能再加了。
(4) 还有一个要求就是这个序列里不能有重复的数,这个东西用 set 判断就行了。
复杂度 nlog2 n
Ps:因为这道题的数据实在是不好造,所以最后公比最大不会很大,可能有很多其他算法也能跑过去。

然而各路大佬各种nb的暴力卡数据都A掉了这题,(只有我这个蒟弱暴力都能爆0……)

首先求出q=1时的答案ans,

枚举q1~1000,如果ans个q乘起来超过了数列的最大值,break;

然后就是一个&n^2&的暴力,用map处理重复的数,复杂度好高……

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<set>
#include<map>
#define int LL
#define LL long long
#define ma(x) memset(x,0,sizeof(x))
#define max(a,b) ((a)>(b)?(a):(b))
using namespace std;
int n;
LL A[200010];
LL l=1,r=100000,mid,q;
LL ans=1,maxn;
map<int,int> mp;
inline LL read()
{
	LL s=0;char a=getchar();
	while(a<'0'||a>'9')a=getchar();
	while(a>='0'&&a<='9'){s=s*10+a-'0';a=getchar();}
	return s;
}
LL gcd(int a,int b){return !b?a:gcd(b,a%b);}
signed main()
{
//	freopen("in.txt","r",stdin);
//	freopen("0.out","w",stdout);

	n=read();
	for(int i=1;i<=n;i++)A[i]=read(),maxn=max(maxn,A[i]);
	int L=0,R=0;r=n;
	for(int i=1;i<=n;i++)
	{
		if(A[i]==A[i-1]&&!L)L=i-1;
		if(A[i]!=A[i-1]&&L)ans=max(ans,i-L),L=i;
	}
	if(A[n]==A[n-1])ans=max(ans,n-L+1);
	bool pd=0;
	for(int q=2;q<=100;q++)
	{
		int tem=0;
		for(int i=1;i<=ans;i++)	
		{
			tem*=q;if(q>maxn){pd=1;break;}
		}
		if(pd)break;
		for(int i=1;i<=n;i++)
		{
			mp.clear();
			int tem=A[i];
			mp[tem]=1;
			if(tem%q!=0&&tem>q){continue;}
			while(tem%q==0)tem/=q;
//			while(tem>=q)tem/=q;
			for(int j=i+1;j<=n;j++)
			{
				int te=A[j];
				if(mp.find(te)!=mp.end()){ans=max(ans,j-i);break;}
				if(te%q!=0&&te!=tem){ans=max(ans,j-i);break;}
				while(te%q==0)te/=q;
				if(te!=tem){ans=max(ans,j-i);break;}
			}
		}
	}
	printf("%lld\n",ans);
}

 

转载于:https://www.cnblogs.com/Al-Ca/p/11186759.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
### SE序列T1加权像的相关信息 在磁共振成像(MRI)中,自旋回波(Spin Echo, SE)序列是一种经典的脉冲序列,广泛用于生成高质量的解剖图像。SE 序列通过调整重复时间(TR)和回波时间(TE),能够实现不同类型的权重成像,其中 T1 加权像是最常见的一种。 #### T1 加权像的特点 T1 加权像主要反映组织纵向弛豫特性的差异。在 SE 序列中,当 TR 较短且 TE 较小时,可以获得较强的 T1 对比度[^1]。此时,由于组织间纵向磁化恢复速度的不同,具有较短 T1 值的组织(如脂肪)表现出较高的信号强度,而较长 T1 的组织(如水)则显示较低的信号强度。 #### SE 序列的应用场景 SE 序列因其稳定性高、伪影少等特点,在临床诊断中被广泛应用。以下是 SE 序列 T1 加权像的一些典型应用场景: 1. **软组织对比增强** T1 加权像特别适合于观察软组织结构之间的细微差别,例如脑部病变检测中的肿瘤识别或炎症评估[^1]。 2. **脂肪抑制技术结合使用** 结合短反转时间反转恢复(STIR)技术,可以有效抑制脂肪信号干扰,从而更清晰地显示病灶区域或其他感兴趣目标[^2]。 3. **神经系统的精细成像** 在神经系统研究领域,SE-T1WI 经常作为基础扫描手段之一,帮助医生了解大脑皮层折叠模式以及深部灰质核团分布情况等重要细节特征[^3]。 4. **弥散张量成像前准备阶段** 如果进一步考虑开展高级扩散分析项目,则可能涉及到基于 DTI 或 CSD 方法构建白质纤维追踪图谱等工作流程;在此过程中初始状态下的常规形态学资料收集同样离不开标准条件设定下获得良好质量水平的标准 T1WIs 成果文件支持[^4]。 ```python import numpy as np def se_t1_weighted(tr, te): """ Simulate signal intensity for Spin-Echo (SE) sequence with given TR and TE. Parameters: tr : float Repetition Time in milliseconds. te : float Echo Time in milliseconds. Returns: signal_intensity : str Description of expected contrast based on provided parameters. """ if tr < 500 and te < 30: return "High T1-weighted contrast is achieved." elif tr >= 500 or te >= 30: return "Insufficient conditions for optimal T1 weighting." ``` 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值