【题解】Atcoder ARC#94 F-Normalization
再次膜拜此强题!神级性质之不可能发现系列收藏++;首先,对于长度<=3的情况,我们采取爆搜答案(代码当中是打表)。对于长度>=4的情况,则有如下几条玄妙的性质:
首先我们将 a, b, c 三个字母看做 0, 1, 2。发现(不知道怎么发现的)当我们做出一次变换之后,数列的和在模意义下是不改变的。(*启示:很多关系好像都和取模之后的某些东西有关,例如食物链,此题,and so on)。
那么:当一个序列 T 可以由 S 转化过来时,T必须满足如下几条性质:
1.T的各位字母之和与S的各位字母之和在 %3 的意义下相等。
2.T中必须存在有两个相邻的相同字母(如果不是,不可能是变换后的结果)
当以上两条性质都不满足时,还剩下一种情况,即 S = T。
如何证明是对的?题解如是说:当 n = 4 时,我们可以用打表来验证此性质。当 n > 4 时,我们可以让第一个字母通过变换变成一样的,然后就变成了两个 n - 1 的序列。这样递归下去,当递归到 4 时,即可得证。看起来好像很对的样子,然而怎么证明一定可以把第一个字母变成一样的呢?我并不会……
建立状态 f[i][j][k][p] 表示 dp 到第 i 位,前面的和在模意义下为 j ,最后一位是 k ,是否已经有两个相邻的相同字母的方案数。然后枚举一下,转移就可以惹……
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define maxn 200050
#define mod 998244353
int n, ans, f[maxn][][][], sum;
char a[maxn]; int read()
{
int x = , k = ;
char c; c = getchar();
while(c < '' || c > '') { if(c == '-') k = -; }
while(c >= '' && c <= '') x = x * + c - '', c = getchar();
return x * k;
} bool Check()
{
for(int i = ; i <= n; i ++)
if(a[i] != a[i - ]) return ;
return ;
} bool Check2()
{
for(int i = ; i <= n; i ++)
if(a[i] == a[i - ]) return ;
return ;
} void Up(int &x, int y) { x = (x + y) % mod; }
void DP(int i, int j, int k, int p)
{
for(int q = ; q <= ; q ++)
Up(f[i + ][q][(q + k) % ][p | (j == q)], f[i][j][k][p]);
} signed main()
{
scanf("%s", a + ); n = strlen(a + );
if(Check()) { puts(""); return ; }
if(n <= )
{
if(n == ) puts("");
else
{
if(a[] != a[] && a[] != a[] && a[] != a[]) puts("");
else if(a[] == a[]) puts("");
else puts("");
}
return ;
}
for(int i = ; i <= n; i ++) sum = (sum + a[i] - 'a') % ;
for(int i = ; i <= ; i ++) f[][i][i][] = ;
for(int i = ; i <= n - ; i ++)
for(int j = ; j <= ; j ++)
for(int k = ; k <= ; k ++)
for(int p = ; p <= ; p ++)
DP(i, j, k, p);
for(int i = ; i <= ; i ++) Up(ans, f[n][i][sum][]);
Up(ans, Check2());
printf("%lld\n", ans);
return ;
}
【题解】Atcoder ARC#94 F-Normalization的更多相关文章
- 【题解】 AtCoder ARC 076 F - Exhausted? (霍尔定理+线段树)
题面 题目大意: 给你\(m\)张椅子,排成一行,告诉你\(n\)个人,每个人可以坐的座位为\([1,l]\bigcup[r,m]\),为了让所有人坐下,问至少还要加多少张椅子. Solution: ...
- [题解] Atcoder ARC 142 D Deterministic Placing 结论,DP
题目 (可能有点长,但是请耐心看完,个人认为比官方题解好懂:P) 首先需要注意,对于任意节点i上的一个棋子,如果在一种走法中它走到了节点j,另一种走法中它走到了节点k,那么这两种走法进行完后,棋子占据 ...
- [题解] Atcoder ARC 142 E Pairing Wizards 最小割
题目 建图很妙,不会. 考虑每一对要求合法的巫师(x,y),他们两个的\(a\)必须都大于\(min(b_x,b_y)\).所以在输入的时候,如果\(a_x\)或者\(a_y\)小于\(min(b_x ...
- [题解] Atcoder AGC 005 F Many Easy Problems NTT,组合数学
题目 观察当k固定时答案是什么.先假设每个节点对答案的贡献都是\(\binom{n}{k}\),然后再减掉某个点没有贡献的选点方案数.对于一个节点i,它没有贡献的方案数显然就是所有k个节点都选在i连出 ...
- [atcoder contest 010] F - Tree Game
[atcoder contest 010] F - Tree Game Time limit : 2sec / Memory limit : 256MB Score : 1600 points Pro ...
- [题解] Atcoder Regular Contest ARC 147 A B C D E 题解
点我看题 A - Max Mod Min 非常诈骗.一开始以为要观察什么神奇的性质,后来发现直接模拟就行了.可以证明总操作次数是\(O(nlog a_i)\)的.具体就是,每次操作都会有一个数a被b取 ...
- 【题解】Atcoder ARC#90 F-Number of Digits
Atcoder刷不动的每日一题... 首先注意到一个事实:随着 \(l, r\) 的增大,\(f(r) - f(l)\) 会越来越小.考虑暴力处理出小数据的情况,我们可以发现对于左端点 \(f(l) ...
- 【Atcoder】ARC 080 F - Prime Flip
[算法]数论,二分图最大匹配 [题意]有无限张牌,给定n张面朝上的牌的坐标(N<=100),其它牌面朝下,每次操作可以选定一个>=3的素数p,并翻转连续p张牌,求最少操作次数使所有牌向下. ...
- [题解] Atcoder Regular Contest ARC 151 A B C D E 题解
点我看题 昨天刚打的ARC,题目质量还是不错的. A - Equal Hamming Distances 对于一个位置i,如果\(S_i=T_i\),那么不管\(U\)的这个位置填什么,对到\(S\) ...
随机推荐
- 关于iOS和Android的安装包更新笔记
关于iOS和Android的安装包更新问题 1. Android更新apk 1)使用DownloadManager下载 2)使用HttpClient下载 apk的下载不能使用ssl,即不能使用http ...
- 图的基本算法(BFS和DFS)
图是一种灵活的数据结构,一般作为一种模型用来定义对象之间的关系或联系.对象由顶点(V)表示,而对象之间的关系或者关联则通过图的边(E)来表示. 图可以分为有向图和无向图,一般用G=(V,E)来表示图. ...
- Uncaught Error: code length overflow. (1604>1056)
解决方法来源~~~https://blog.csdn.net/arrowzz/article/details/80656510 二维码生成时,如果长度太长会有异常: Uncaught Error: c ...
- 对Java对象的认识与理解
今天是我学习编程以来第一次写博客,记下平日学习所得,本来这几日都在学习web框架 但觉得梳理一下之前所学很有必要.毕竟之前学习Java感觉很粗略只是以考试为目的.所以就以<Thinking in ...
- git branch 分支与合并
在使用 git 进行分支开发与合并的时候需要用到这些命令.其他基本 git 命令参考 Git 简易食用指南 git branch 查看分支 git branch 查看当前分支情况 创建分支 git b ...
- 技能get,React的优雅升级!
今日,我们不啖鸡汤,不饮鸡血 只有干货——关于React的优雅升级 双手奉上,来,干了! -2019年第4期- 夫 子 说 本次升级基础包情况:react 15.6 -> 16.6 升级流程: ...
- scatter注记词
say illness thumb ginger brass atom twenty omit fine thought staff poverty
- IntelliJ IDEA 2018 for MAC安装及破解
---------------------说在前面-------------------------- IntelliJ IDEA 2018 版本为2018.1.4 教程按照下载安装sdk.破解两部分 ...
- SGU 176 Flow construction(有源汇上下界最小流)
Description 176. Flow construction time limit per test: 1 sec. memory limit per test: 4096 KB input: ...
- HTML5form表单的相关知识总结
首先在介绍HTML5form表单的新增内容之前,我总结了一下HTML的form表单的内容. <!DOCTYPE html> <html lang="en"> ...