AtCoder Regular Contest 180
1.E. Arranging The Sheep2.C. Team3.C. RationalLee4.B. Preparing Olympiad5.B. Find The Array6.E. Accidental Victory7.A. Learning Languages8.A. k-th divisor9.B. Quasi Binary10.蓝桥杯-地宫取宝11.D. Divide by three, multiply by two12.D. Game With Array13.B. Composite Coloring14.洛谷 P1204 [USACO1.2] 挤牛奶Milking Cows15.洛谷 P3353 在你窗外闪耀的星星16.洛谷 P8818 [CSP-S 2022] 策略游戏17.Educational Codeforces Round 164 (Rated for Div. 2)18.E. Chain Reaction19.Manthan, Codefest 18 (rated, Div. 1 + Div. 2) D. Valid BFS?20.D. Distance in Tree21.D. Multiplication Table22.C. Mixing Water23.B. Greg and Graph24.D. Another Problem About Dividing Numbers25.Acwing 143. 最大异或对26.Acwing 3485. 最大异或和27.C. Checkposts28.E. Lomsat gelral29.D. Powerful array30.D. Deleting Divisors31.Codeforces Round 950 (Div. 3)32.Codeforces Round 951 (Div. 2)33.SuntoryProgrammingContest2024(AtCoder Beginner Contest 357)34.Codeforces Round 952 (Div. 4)35.AtCoder Beginner Contest 35836.B. Modulo Sum37.D. Soldier and Number Game38.AtCoder Beginner Contest 35939.Codeforces Round 954 (Div. 3)40.Codeforces Round 955 (Div. 2, with prizes from NEAR!)
41.AtCoder Regular Contest 180
42.D - Ghost Ants43.AtCoder Beginner Contest 361)44.Codeforces Round 957 (Div. 3)45.E. Decode46.Educational Codeforces Round 168 (Rated for Div. 2)47.B. Parity and Sum48.P1972 [SDOI2009] HH的项链49.Codeforces Round 966 (Div. 3) VP50.https://codeforces.com/contest/2004/problem/B51.C. Splitting Items52.D. Colored Portals53.Codeforces Round 967 (Div. 2)54.D. Determine Winning Islands in Race55.C. Turtle and Good Pairs56.Codeforces Round 970 (Div. 3)(VP)57.G. Sakurako's Task58.Codeforces Round 971 (Div. 4)59.C. Lazy Narek60.B. Regular Bracket Sequence61.C. News Distribution62.B. Karen and Coffee63.G. 2^Sort64.C. Johnny and Another Rating Drop65.A. Greg and Array66.D2. Magic Powder - 267.C. Schedule Management68.C. Constanze's Machine69.C. Soldier and Cards70.C. Berland Regional71.E. Anna and the Valentine's Day Gift72.B. Polo the Penguin and Matrix73.B. Fortune Telling74.C. Powers Of Two75.D. Palindromes ColoringA - ABA and BAB
题意:给定一个长度为n的字符串,每次操作可以将s中连续的子串"ABA"->"A", 或者"BAB"->"B"。该操作可以执行任意的次数,但是相同的串不进行计数。 问有多少种不同的串可以通过操作得到。
思路:根据操作的特性,可以想到奇偶性相同的位数上的字符需要相等,并且中间字符需要不相等才可以进行变换。
于是我们对所有的奇(或者偶)位上的字符进行取反变换,这样只要统计连续的相同字符数量的长度,就可以知道该长度的串有多少种变换方式。
将s分为若干个块来考虑,每个块中所有的字符都相等,容易知道每个块中的变换方法数量的乘积就是最后的答案。
总结:题目的描述很容易让人想动态规划,但是感觉不对,这个状态怎么表示,怎么转移呢?如何从暴力的方法进行重复计算降低,来压缩时间呢。。感觉好像行不通。 后来看了题解一时间也不理解,然后举了一些例子以后,就可以明白了。 这种操作的特性就是容易对问题进行简化,因为奇偶性相同的位必须字符相同,奇偶性不同的位奇偶性必须不同。 所以对奇数位或者偶数位进行一个取反的变换,问题就可以转化为求字符相等的字符串长度。 这种问题的转变正确性可以保证的原理就是,只改变奇数或者偶数位上的字符,不会影响最终的计数。 还有一个容易产生的疑惑是,这种转换了问题角度以后,是怎么考虑重复的串的? 目前的理解是根据长度,对于一段连续的字符串来说,变换后的长度如果相等的话,那么就是一个相同的串。 比如ABAB,变换前面得到AB,变换后面也是AB。
constexpr int mod = (int)1e9 + 7;
void solve() {
int n;
cin >> n;
string s;
cin >> s;
long long ans = 1;
int len = 1;
for (int i = 1; i < n; ++i){
if (i & 1){
s[i] += (s[i] == 'A' ? 1 : -1);
}
if (s[i] == s[i - 1]){
len ++;
}
else{
ans *= 1ll * (len + 1) / 2;
len = 1;
ans %= mod;
}
}
ans *= 1ll * (len + 1) / 2;
cout << ans % mod << endl;
}
合集:
记录随手刷过的编程题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架