AT5661 [AGC040C] Neither AB nor BA:数论,组合数学

本文深入解析了AT5661[AGC040C]NeitherABnorBA题目的算法思路,通过巧妙处理字符串中AB字符在奇偶位置的数量关系,成功将问题转化为数学问题。文章详细解释了如何计算在特定条件下无法删除所有AB组合的字符串数量,包括奇数位置A和偶数位置B的计数方法,以及如何通过组合数学求解。

题目来源: AT5661 [AGC040C] Neither AB nor BA.
参考题解: Tea’s blog
LXD让我们做这个题目,当然先是手玩啦,找删的掉得太多,所以找删不掉得。n=2:AB BA ,n=4 前面补,后面补等等写了写式子,发现在删不掉得基础上补了,前面得又被删掉了,无头绪,抄题解啦。
题解很巧妙,处理AB的在奇偶位置上的个数关系。成功的将题目转为数学题!
我们可以发现,将一个字串的A替换为B,B替换为A,性质不变,因此可以只处理一半。
我们设奇数位置上的A有 x x x个,偶数位置上的B有 y y y个,则有
{ x < = n 2 y < = n 2 \begin{cases} x<=\frac {n}{2}\\ y<=\frac n2 \end{cases} {x<=2ny<=2n
偶数位置上的非B符号,也就是A和C有 n 2 − y \frac n2-y 2ny个,每个非B都可以删掉一个奇数位置上的A,如果删完了有剩下的,那必然有奇数位置上的A和偶数位置上的B相邻,什么时候才能有剩下的?也即是 x > = n 2 − y x>=\frac n2-y x>=2ny;移向后得 x + y > = n 2 x+y>=\frac n2 x+y>=2n.
因此我们找出所有情况减去删不掉的情况也即是:
3 n − 2 ∗ c o u n t ( ( x + y ) > n 2 ) 3^n-2*count((x+y)>\frac n2) 3n2count((x+y)>2n)

如何计算: c o u n t ( ( x + y ) ) count((x+y)) count((x+y))

分为两部分:

  • 奇A偶B无关的数据
    x + y = t x+y=t x+y=t,则奇A偶B无关的数据有 n − t n-t nt个,在奇数位置上可填的数据是B,C,在偶数位置上可以填的数据是A,C,各有两种情况,因此总数是 2 n − t 2^{n-t} 2nt;
  • 奇A偶B数据
    也就是从n个数里选出t个数,其中奇数有 x x x个,偶数有 y y y个。
    开始我是这么想的
    例如: n = 6 , t = 4 n=6,t=4 n=6,t=4的情况:
    { x = 1 , y = 3 ; C 3 1 ∗ C 3 3 x = 2 , y = 2 ; C 2 2 ∗ C 2 2 x = 3 , y = 1 ; C 3 3 ∗ C 3 1 \begin{cases}x=1,y=3;C^1_3*C^3_3 \\x=2,y=2;C^2_2*C^2_2\\x=3,y=1;C^3_3*C^1_3\end{cases} x=1,y=3;C31C33x=2,y=2;C22C22x=3,y=1;C33C31
    计算完了之后发现是3+3*3+3=15,正好是 C 6 4 C^4_6 C64,也就是我们只需要从 n n n中选出 t t t个数,也就是 C n t C^t_n Cnt。其中奇数的位置放上A,偶数的位置放上B,这样就符合要求了。
    因此删不完得字串个数就是: C n t ∗ 2 n − t C^t_n*2^{n-t} Cnt2nt

如何计算: c o u n t ( ( x + y ) > n 2 ) count((x+y)>\frac n2) count((x+y)>2n)

∑ t = n 2 + 1 n ∗ C n t ∗ 2 n − t \sum_{t=\frac n2+1}^{n}*C^t_n*2^{n-t} t=2n+1nCnt2nt

到这里我自己就理清思路了。顺便复习了下markdown,但我过会又会忘记的——已经18岁的老年痴呆患者!

//TJ
#include<bits/stdc++.h>
using namespace std;

const int N=1e7+10;
typedef long long ll;
ll n,fac[N],invf[N],mi2[N],ans;//fac 阶乘,invf 阶乘得逆元 
const ll mod=998244353;

ll qpow(ll a,ll b) {
	ll ans=1ll;
	while(b) {
		if(b&1) ans=(ans*a)%mod;
		a=(a*a)%mod;
		b/=2;
	}
	return ans;
}

ll C(int x,int y) {
	return fac[x]*invf[y]%mod*invf[x-y]%mod;
}

int main() {
	scanf("%d",&n);
	fac[0]=mi2[0]=1;
	for(int i=1; i<=n; i++)
		fac[i]=1ll*fac[i-1]*i%mod,mi2[i]=mi2[i-1]*2%mod;//fac阶乘,ci 2^2; 
	invf[n]=qpow(fac[n],mod-2);
	for(int i=n-1; i>=0; i--)
		invf[i]=1ll*invf[i+1]*(i+1)%mod;
	for(int i=n/2+1; i<=n; i++)
		ans=(ans+C(n,i)*mi2[n-i]%mod)%mod;
	ans=((qpow(3,n)-ans*2)%mod+mod)%mod;
	printf("%lld\n",ans);
}

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究”展开,提出了一种结合数据驱动方法与Koopman算子理论的递归神经网络(RNN)模型线性化方法,旨在提升纳米定位系统的预测控制精度与动态响应能力。研究通过构建数据驱动的线性化模型,克服了传统非线性系统建模复杂、计算开销大的问题,并在Matlab平台上实现了完整的算法仿真与验证,展示了该方法在高精度定位控制中的有效性与实用性。; 适合人群:具备一定自动化、控制理论或机器学习背景的科研人员与工程技术人员,尤其是从事精密定位、智能控制、非线性系统建模与预测控制相关领域的研究生与研究人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能预测控制;②为复杂非线性系统的数据驱动建模与线性化提供新思路;③结合深度学习与经典控制理论,推动智能控制算法的实际落地。; 阅读建议:建议读者结合Matlab代码实现部分,深入理解Koopman算子与RNN结合的建模范式,重点关注数据预处理、模型训练与控制系统集成等关键环节,并可通过替换实际系统数据进行迁移验证,以掌握该方法的核心思想与工程应用技巧。
基于粒子群算法优化Kmeans聚类的居民用电行为分析研究(Matlb代码实现)内容概要:本文围绕基于粒子群算法(PSO)优化Kmeans聚类的居民用电行为分析展开研究,提出了一种结合智能优化算法与传统聚类方法的技术路径。通过使用粒子群算法优化Kmeans聚类的初始聚类中心,有效克服了传统Kmeans算法易陷入局部最优、对初始值敏感的问题,提升了聚类的稳定性和准确性。研究利用Matlab实现了该算法,并应用于居民用电数据的行为模式识别与分类,有助于精细化电力需求管理、用户画像构建及个性化用电服务设计。文档还提及相关应用场景如负荷预测、电力系统优化等,并提供了配套代码资源。; 适合人群:具备一定Matlab编程基础,从事电力系统、智能优化算法、数据分析等相关领域的研究人员或工程技术人员,尤其适合研究生及科研人员。; 使用场景及目标:①用于居民用电行为的高效聚类分析,挖掘典型用电模式;②提升Kmeans聚类算法的性能,避免局部最优问题;③为电力公司开展需求响应、负荷预测和用户分群管理提供技术支持;④作为智能优化算法与机器学习结合应用的教学与科研案例。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,深入理解PSO优化Kmeans的核心机制,关注参数设置对聚类效果的影响,并尝试将其应用于其他相似的数据聚类问题中,以加深理解和拓展应用能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值