正题

题目链接:https://www.luogu.com.cn/problem/AT5661


题目大意

一个包含\(A,B,C\)的序列,每次可以选择相邻的两个除了\(AB\)和\(BA\)的删去。

求有多少个长度为\(N\)的序列可以删完。

\(1\leq N\leq 10^7\)


解题思路

因为每次是删除一个奇数位置和一个偶数位置,如果我们把所有偶数位置的取反,那么就变成了不能删除\(AA\)和\(BB\)。

然后如果在边上\(A\)一定可以删(除非到边界),也就是\(A\)的数量不能超过\(\frac{n}{2}\),同理\(B\)也是。

然后减去\(A\)大于的或者\(B\)大于的就好了(因为只能有一个大于)

时间复杂度\(O(n)\)


code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const ll N=1e7+10,P=998244353;
ll n,pw[N],inv[N],fac[N],ans;
ll C(ll n,ll m)
{return fac[n]*inv[m]%P*inv[n-m]%P;}
signed main()
{
scanf("%lld",&n);
pw[0]=ans=inv[1]=1;
for(ll i=2;i<=n;i++)inv[i]=P-(P/i)*inv[P%i]%P;
inv[0]=fac[0]=1;
for(ll i=1;i<=n;i++)
fac[i]=fac[i-1]*i%P,inv[i]=inv[i-1]*inv[i]%P;
for(ll i=1;i<=n;i++)
ans=ans*3%P,pw[i]=pw[i-1]*2%P;
for(ll i=n/2+1;i<=n;i++)
ans=(ans-pw[n-i]*C(n,i)%P*2%P+P)%P;
printf("%lld\n",ans);
return 0;
}

AT5661-[AGC040C]Neither AB nor BA【模型转换】的更多相关文章

  1. [AGC040C] Neither AB nor BA

    Description 一个长度为 n 的字符串是好的当且仅当它由 'A', 'B', 'C' 组成,且可以通过若干次删除除了"AB"和"BA"的连续子串变为空 ...

  2. @atcoder - AGC040C@ Neither AB nor BA

    目录 @description@ @solution@ @accepted code@ @detail@ @description@ 给定偶数 N,求由 'A', 'B', 'C' 三种字符组成的字符 ...

  3. 静态链表实现 (A-B)U(B-A)

    图中黄色部分为(A-B)U(B-A)的实际意义,用结构数组做静态链表来实现该表达式 大致流程是先建立A链表,接着将挨个输入的B中元素在A链表中遍历.如果没找到,就加到A链表结尾下标为endpointe ...

  4. 前端MVVM框架avalon - 模型转换1

    轻量级前端MVVM框架avalon - 模型转换(一) 接上一章 ViewModel modelFactory工厂是如何加工用户定义的VM? 附源码 洋洋洒洒100多行内部是魔幻般的实现 1: fun ...

  5. 将List 中的ConvertAll的使用:List 中的元素转换,List模型转换, list模型转数组

    一,直接入代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; using S ...

  6. 已知 $AB$, 求 $BA$

    设 $A,B$ 分别是 $3\times 2$ 和 $2\times 3$ 实矩阵. 若 $\dps{AB=\sex{\ba{ccc}  8&0&-4\\  -\frac{3}{2}& ...

  7. Verification of Model Transformations A Survey of the State-of-the-Art 模型转换的验证 对现状的调查

    模型驱动工程范式认为软件开发生命周期由工件(需求规范.分析和设计文档.测试套件.源代码)支持,这些工件是表示要构建的系统不同视图的模型.存在一个由模型转换驱动的(半)自动构造过程,从系统的抽象模型开始 ...

  8. BA模型 第10章

    1.BA模型BA模型就是世界坐标到像素坐标的转换过程.这里多了一个去畸变.因为归一化平面坐标在转成像素坐标的过程中会出现畸变.这里只处理了径向畸变,径向畸变包括桶形失真和枕形失真,都是由于图像放大率随 ...

  9. 【tensorflow-v2.0】如何将模型转换成tflite模型

    前言 TensorFlow Lite 提供了转换 TensorFlow 模型,并在移动端(mobile).嵌入式(embeded)和物联网(IoT)设备上运行 TensorFlow 模型所需的所有工具 ...

随机推荐

  1. flutter实现文字超出最大宽度显示省略号

    Container( width: 60, child: Text( '...', maxLines: 1, overflow: TextOverflow.ellipsis, ), ) 给Text外层 ...

  2. 使用C# 实现串口拨号器的SIM卡通信

    参考网址:https://www.cnblogs.com/xugang/archive/2012/08/23/2652671.html 写此博客意为抛砖引玉,希望能和博客园的朋友们探讨一下关于.NET ...

  3. java基础路线与详细知识点

    点击下方打开文件查看 还在持续更新中.....

  4. web项目中的浏览器行为和服务器行为

    package day10.think_about_path; import java.io.IOException; import javax.servlet.ServletException; i ...

  5. Web安全-CDN相关技术

    CDN介绍 CDN的全称是Content Delivery Network,即内容分发网络.CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发. ...

  6. 在Raspberry Pi 3B+上安装Windows 10 IoT

    下载 进入树莓派下载页面,当前网址https://www.raspberrypi.org/downloads/ 选择Windows 10 IoT Core,当前网址https://docs.micro ...

  7. centos7系统上pgsql的一些报错解决方法

    1.2021-07-15 # 问题: 登录时服务器拒绝连接 psql -h 192.168.1.112 # 解决方法:修改配置文件 pg_hba.conf ,将该主机加进白名单 vi pg_hba.c ...

  8. Python学习笔记摘要(一)类型 字符串 函数 列表 深浅拷贝

    python中的对象和类型 在python中,认为系统中的每一个"东西"都是一个对象,在python中,"对象"有着特殊的意义,python中的对象有: 一个标 ...

  9. vue ele 日期时间格式限制不能早于当天,时间转换成时间戳 进行比较

    <el-date-picker             value-format="yyyy-MM-dd HH:mm:ss"             v-model=&quo ...

  10. vue element-ui el-date-picker 数据可以更改,但是前端不显示的更改后的数据问题

    template: <el-form-item label="有效时间:" prop="validTime">                    ...