蓝桥20092 录入成绩-分类讨论&正确性推理

https://www.lanqiao.cn/problems/20092/learning/?page=1&first_category_id=1

# 当匹配到G1的时候,在什么条件下会导致它不能被视为国一?
# 1     1前面有偶数个G,分解为G, GG, GG... G1 可能会导致 G超过一个
# 1.1   涉及到G的数量问题, 数字前面有若干个G 举例, 若同时存在 GG2, G2 (2前有奇数个G、偶数个G) 即可满足不分解出G,也可以有2 和 G2
# 1.2   但是如果只有一种,如只有G2, GGG2, 则需要分解出一个G才能满足同时存在 2 和 G2 
# 1.3   由于只有一个G , 最多只会出现一个数字出现全奇数G/全偶数G, 如果字符串末尾是连续奇数G则所有数字都必然存在奇数G和偶数G

s = input()
odd_even = [[0, 0] for _ in range(4)] # odd_even[x][0] 代表 数字x前有偶数个G 的数字x个数, odd_even[x][1] 代表 数字x前有奇数个G 的数字x个数
cnt = 0
for ch in s:
    if ch == 'G':
        cnt += 1
    else:
        odd_even[int(ch)][cnt % 2] += 1
        cnt = 0
if cnt % 2 or (odd_even[2][0] > 0) ^ (odd_even[2][1] > 0) or (odd_even[3][0] > 0) ^ (odd_even[3][1] > 0):
    # 存在奇数G1,偶数G1,且其他地方分解出G了,则奇数G1会被分解成若干个GG 和1个G1 , 偶数G1会被分解成若干个GG 和 1个1
    print(odd_even[1][1])
else:
    if (odd_even[1][0] > 0) ^ (odd_even[1][1] > 0):
        # 只存在奇数G1 或 只存在偶数G1, 若只存在奇数G1, 其中一个分解为若干GG,一个G,一个1; 若只存在偶数G1,只有一个能分解成若干GG, 一个G, 一个G1
        print(odd_even[1][1] - 1 if odd_even[1][1] > 0 else 1)
    else:
        # 奇数G1分解为GG,G1, 偶数G1中有一个分解为GG,G,G1
        print(odd_even[1][1] + 1)
posted @   凉叶染香  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示