首页 > 其他分享 >AT_arc180_a [ARC180A] ABA and BAB 题解

AT_arc180_a [ARC180A] ABA and BAB 题解

时间:2024-07-03 10:22:52浏览次数:1  
标签:ABA ch const int 题解 long flag BAB tot

思路

首先一个浅显易得的结论,当 \(A\) 或 \(B\) 连续出现时,我们可以将它们分成两段,每段都可以看作一个独立事件,结果数只和每个独立事件的样本点有关。

我们设独立事件共有 \(tot\) 个,每个独立事件的样本点为 \(w_i\),则显然有 \(ans=\prod_{i=1}^{tot} w_i\)。

接下来该找 \(w_i\) 的值了。先打表找规律,发现 ABAABAB 的种类数均为 2,ABABAABABAB 的种类数均为 3。浅推一下,可以得到一个由 \(A\) 和 \(B\) 交替出现总计长度为 \(n\) 的串的全部样本点为 \(\lceil {\frac{n}{2}} \rceil\),那么答案也就呼之欲出了。

实现要点

定义一个变量 \(flag\) 用来记录上一个出现的字符以判断是否到达两个独立事件的边界。

AtCoder 不能使用 cin>>s+1 的操作,我们只能从下标为 0 开始输入。

long long,防止爆 int

code:

#include<bits/stdc++.h>
using namespace std;
const int Ratio=0;
const int N=250005;
const int mod=1e9+7;
int len,n,tot,w[N];
char ch[N];
bool flag;
long long ans=1;
void Wsolve()
{
	if(n&1) n++;int res=n/2;//手动向上取整
	w[++tot]=res; 
}
int main()
{
	scanf("%d",&len);cin>>ch;n=1;
	if(ch[0]=='A') flag=1;
	else flag=0;
	for(int i=1;i<len;i++)
		if((flag&&ch[i]=='B')||(!flag&&ch[i]=='A')) flag^=1,n++;
		else Wsolve(),n=1;
	Wsolve();//最后可能有未截止的独立事件
	for(int i=1;i<=tot;i++)
		ans=ans*w[i]%mod;
	printf("%lld\n",ans);
	return Ratio; 
}

完结撒花~

不能放图了www

标签:ABA,ch,const,int,题解,long,flag,BAB,tot
From: https://www.cnblogs.com/Ratio-Yinyue1007/p/18281077

相关文章

  • 题解 - 数字计数
    题目思路简析正解是数位dp,但是我不太会,所以我打分块。考虑从\(10^6\)到\(2\times10^6\)和从\(3\times10^6\)到\(4\times10^6\),其中真正的区别只有观察到数据范围是\(10^{12}\),分为一些块,每块长\(10^6\)会比较均衡,所以共有\(10^6\)个块。最差情况是\(n=10^6+1......
  • 题解 - 数字计数
    题目思路简析正解是数位dp,但是我不太会,所以我打分块。考虑从\(10^6\)到\(2\times10^6\)和从\(3\times10^6\)到\(4\times10^6\),其中真正的区别只有观察到数据范围是\(10^{12}\),分为一些块,每块长\(10^6\)会比较均衡,所以共有\(10^6\)个块。最差情况是\(n=10^6+1......
  • 07/02/2024 融合热身赛赛后总结&题解
    一、总体情况考试一共有五道题。这次考试失误严重,C题非常水的一道题做了快两个小时,严重影响了心态和做其它题的时间。最终3个小时只做了A,C......
  • [JLU] 数据结构与算法上机题解思路分享-第三次上机
    前言首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。这里只是思路解析的博客,代码仓库在JLU_Data_Structures_Record希望你能在这里找到你想要的:)正文A图的创建分数10作者朱允刚单位吉林大学请编写程序创建一个有向图。有向图中包含......
  • AT_tdpc_number 数 题解
    题目传送门前置知识数位DP|记忆化搜索解法本题的提交在luogu上挂了,建议去原站或Vjudge上提交。基础数位DP,记录当前位置、已填的数码之和,接着记忆化搜索即可。需要注意的是\(0\bmodd=0\),如果写得不太好看(未处理前导零)的话需要减去其贡献。代码#include<bits/......
  • SP8177 JZPEXT - Beautiful numbers EXTREME 题解
    题目传送门前置知识数位DP|同余解法同余的传递性:若\(\begin{cases}a,b\in\mathbf{Z}\\p,q\in\mathbb{N}^{*}\\q|p\end{cases}\),则当\(a\equivb\pmod{p}\)时有\(a\equivb\pmod{q}\)。故在本题中\(\bmod\)各非零数码均等于\(0\)等价于\(\bmod\)各......
  • P5324 题解
    题意给定一个数列\(\{a_n\}\),定义一次删除操作为:假设当前序列长度为\(len\),删除序列中所有等于\(len\)的数。现在有\(m\)个操作,每次操作为单点修改或整体加减。每次操作完后,你需要修改若干个数,使得序列能够在若干次删除操作后被删空,求最小修改次数。数据范围:\(1\len,m......
  • 复旦大学2023--2024学年第二学期(23级)高等代数II期末考试第七大题解答
    七、(10分) 设$V$是$n$阶实矩阵全体构成的实线性空间, $A$是$n$阶正定实对称阵.对任意的$X,Y\inV$,定义二元函数$(X,Y)=\mathrm{tr}(XAY')$.(1)求证:$(-,-)$是$V$上的一个内积.(2)在上述内积下,$V$成为一个欧氏空间. 设$P,Q\inV$,$V$上的线性算子$......
  • abc360 E 题解
     E对于位置2~n,它们的概率是相等的。n*n个(x,y)对。其中x可以等于y。 对于x/y,y的逆元rev(y)为mul(y,mod-2)。加、减、乘、除都可以做。比如48/9和16/3的结果是一样的,48*rev(9)%mod=16*rev(3)%mod。比如3*rev(2)%mod=(rev(2)+rev(2)+rev(2))%mod. 对于每次操作,有多少......
  • 十四、Redis应用问题解决
    文章目录一、缓存穿透1.1问题描述1.2解决方案二、缓存击穿2.1问题描述2.2解决方案三、缓存雪崩3.1问题描述3.2解决方案四、分布式锁4.1问题描述4.2解决方案:使用redis实现分布式锁4.3编写代码4.4优化之设置锁的过期时间4.5优化之UUID防误删4.6优化之LUA脚......