@description@

给定偶数 N,求由 'A', 'B', 'C' 三种字符组成的字符串 S,有多少满足如下的条件:

每次可以选择 S 中的两个相邻字符(不能选择 "AB" 与 "BA"),删除它们。最后可以将 S 删成空串。

比如:"ABBC" -> "AC" -> ""。所以 "ABBC" 对于 N = 4 时是合法的。

将最终答案 mod 998244353。

Constraints

2≤N≤10^7, 并保证 N 为偶数

Input

输入形式如下:

N

Output

输出答案 mod 998244353。

Sample Input 1

2

Sample Output 1

7

除了 "AB", "BA" 都可行。

@solution@

考虑删除连续 2 个字符,哪些东西不会变化。

这时你会惊讶地发现:一个字符在字符串中的所处位置的奇偶性不会变化。

其实挺容易验证。假如在删除的前面,不会影响;假如在删除的后面,位置向前移动 2,奇偶不变。

那么一个奇数位置上的 "A" 与一个偶数位置上的 "B" 永远不可能互相消;一个偶数位置上的 "B" 与一个奇数位置上的 "A" 也永远不可能互相消。这些字符需要其他的字符消掉。

记 S1 = 奇数位置的 "A" 数量 + 偶数位置的 "B" 数量,那么应有 2*S1 <= N。

同理记 S2 = 奇数位置的 "B" 数量 + 偶数位置的 "A" 数量,那么应有 2*S2 <= N。

其实以上两个条件 (2*S1 <= N, 2*S2 <= N) 就是充要条件。

可以归纳验证。假如 2*S1 = N, 2*S2 = N 同时满足,则我们可以同时消 S1 与 S2;否则我总是消 S1 与 S2 的较大值。

那么最终答案就是 3^N - (2*S1 > N 的方案数) - (2*S2 > N 的方案数)。

随便组合计数一下就没了。

@accepted code@

#include <cstdio>
const int MOD = 998244353;
const int MAXN = 10000000;
int sub(int x, int y) {return x - y < 0 ? x - y + MOD : x - y;}
int pow_mod(int b, int p) {
int ret = 1;
while( p ) {
if( p & 1 ) ret = 1LL*ret*b%MOD;
b = 1LL*b*b%MOD;
p >>= 1;
}
return ret;
}
int pw2[MAXN + 5], fct[MAXN + 5], ifct[MAXN + 5];
void init() {
pw2[0] = 1;
for(int i=1;i<=MAXN;i++)
pw2[i] = 2LL*pw2[i-1]%MOD;
fct[0] = 1;
for(int i=1;i<=MAXN;i++)
fct[i] = 1LL*fct[i-1]*i%MOD;
ifct[MAXN] = pow_mod(fct[MAXN], MOD-2);
for(int i=MAXN-1;i>=0;i--)
ifct[i] = 1LL*ifct[i+1]*(i+1)%MOD;
}
int comb(int n, int m) {
return 1LL*fct[n]*ifct[m]%MOD*ifct[n-m]%MOD;
}
int main() {
init(); int N;
scanf("%d", &N);
int ans = pow_mod(3, N);
for(int i=N/2+1;i<=N;i++)
ans = sub(ans, 2LL*comb(N, i)*pw2[N-i]%MOD);
printf("%d\n", ans);
}

@detail@

老年选手连 AGC 的 C 题都做不出来了 QAQ。

整了一个上午 + 一个晚上,最后还是看了题解 QAQ。

感觉主要是。。。想不到根据位置的奇偶性来分析吧。。。

吃一堑,长一智.jpg。

为什么 AGC 这么喜欢出这种类型的题啊 QAQ。

人类智慧实在是太强大了 QAQ。

@atcoder - AGC040C@ Neither AB nor BA的更多相关文章

  1. [AGC040C] Neither AB nor BA

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

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

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

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

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

  4. 矩阵迹 tr(AB)=tr(BA)的证明

    其实更为直观的理解是:AB与BA具有相同的对角线元素,因此tr(AB)=tr(BA)必然成立 ref:https://blog.csdn.net/silence1214/article/details ...

  5. AT5661-[AGC040C]Neither AB nor BA【模型转换】

    正题 题目链接:https://www.luogu.com.cn/problem/AT5661 题目大意 一个包含\(A,B,C\)的序列,每次可以选择相邻的两个除了\(AB\)和\(BA\)的删去. ...

  6. AtCoder Grand Contest 040 C - Neither AB nor BA

    传送门 好妙的题啊 首先容易想到简单容斥,统计合法方案数可以考虑总方案数减去不合法方案数 那么先考虑如何判断一个串是否合法,但是直接判断好像很不好搞 这时候就需要一些 $magic$ 了,把所有位置下 ...

  7. AGC040 Task C. Neither AB Nor BA

    Observations 对一个长为 $2N$ 的序列重复下述操作:取走两个相邻且不同的元素.最后能把序列取空的充要条件是序列中不存在出现超过 $N$ 次的元素. 证明:必要性,取 $N$ 次最多能取 ...

  8. [ACM_图论] ZOJ 3708 [Density of Power Network 线路密度,a->b=b->a去重]

    The vast power system is the most complicated man-made system and the greatest engineering innovatio ...

  9. Codeforces Round #306 (Div. 2) A. Two Substrings【字符串/判断所给的字符串中是否包含不重叠的“BA” “AB”两个字符串】

    A. Two Substrings time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...

随机推荐

  1. css背景图自适应

    在开发时,修改了d2admin的登录页面.使用了背景图片,但是ui给的图过于大(可能是我电脑屏幕小哈)无法完整的显示到页面上,所以修改了代码,可以完整显示背景图. 代码如下:background: u ...

  2. 玩转gulp之压缩打包热重载

    上节上上节我们讲了gulp的sass编译和watch监听,动态加载 这样我们就可以做到,我管我写我的sass然后保存,自动编译,就好像我们在写css一样,这是一个自动化的一大步.我们呱唧呱唧. 我们已 ...

  3. LintCode 两两交换链表中的节点

    给一个链表,两两交换其中的节点,然后返回交换后的链表. 样例 给出 1->2->3->4, 你应该返回的链表是 2->1->4->3. 分析:第一次调试的时候用了P ...

  4. SOFARPC学习(一)

    接触SOFARPC,是从一个好朋友(女程序媛)的推荐开始,目的是从头到尾了解这个框架,包括使用方法和源码解析. 当学习一个新东西的事物,我总喜欢先总体把握,在深入细节,这样就可以有种高屋建瓴的感觉,否 ...

  5. vmware 与Device/Credential Guard不兼容

    解决办法 关闭hv 重启就完了

  6. 洛谷P2912 [USACO08OCT]牧场散步Pasture Walking [2017年7月计划 树上问题 01]

    P2912 [USACO08OCT]牧场散步Pasture Walking 题目描述 The N cows (2 <= N <= 1,000) conveniently numbered ...

  7. windows 操作系统下git报filename too long 处理方法

    两种方法解决: 一是通过修改配置文件 [core] repositoryformatversion = filemode = false bare = false logallrefupdates = ...

  8. SASS:sass语法参照列表及教程

    http://sass-lang.com/documentation/file.SASS_REFERENCE.html 保存一下,上面的链接包括了scss中所有语法规则. 转载自:http://www ...

  9. loadrunner录制脚本时登录密码转md5

    在录制用户注册登录脚本时,常常会遇到web程序对用户密码进行加密处理.在很多时候采用的加密方式为MD5. 这时有两种处理方式: 一.所有用户采用同一密码 例如:每个用户名的密码都为e10adc3949 ...

  10. Hdu 1156

    题目链接 Brownie Points II Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...