USACO@2020铜级赛第二题

题目(摘自usaco.org)

Farmer John 的远房亲戚 Ben 是一个疯狂的科学家。通常这会在家庭聚会时造成不小的摩擦,但这偶尔也会带来些好处,尤其是当 Farmer John 发现他正面对一些有关他的奶牛们的独特而不寻常的问题时。
Farmer John 当前正面对一个有关她的奶牛们的独特而不寻常的问题。他最近订购了 N 头奶牛(1≤N≤1000),包含两种不同品种:荷斯坦牛和更赛牛。他在订单中用一个长为 N 的字符串来指定奶牛,其中的字符为 H(表示荷斯坦牛)或 G(表示更赛牛)。不幸的是,当这些奶牛到达他的农场,他给她们排队时,她们的品种组成的字符串与原先的不同。

我们将这两个字符串称为 A 和 B,其中 A 是 Farmer John 原先想要的品种字符组成的字符串,B 是他的奶牛们到达时组成的字符串。Farmer John 并没有简单地检查重新排列 B 中的奶牛是否能得到 A,而是请他的远房亲戚 Ben 利用他的科学才华来解决这一问题。

经过数月的研究,Ben 发明了一台不同寻常的机器:奶牛品种转换机3000,能够选择任意奶牛组成的子串并反转她们的品种:在这个子串中的所有 H 变为 G,所有 G 变为 H。Farmer John 想要求出将他当前的序列 B 变为他本来订购时想要的 A 需要使用这台机器的最小次数。然而,Ben 的疯狂的科学家技能并不会处理开发奇异机器以外的事,所以你需要帮助 Farmer John 解决这个计算难题。

输入格式(文件名:breedflip.in):
输入的第一行包含 N,以下两行包含字符串 A 和 B。每个字符串均包含 N 个字符,字符均为 H 和 G 之一。

输出格式(文件名:breedflip.out):
输出将 B 变为 A 需要使用机器的最小次数。

思路分析

这是一道关于字符串子串的题目,通过观察,我们可以发现不管正序或者倒序遍历列表,决定改变品种与否的条件是如果同一个下标的位置,A和B的牛品种不一样,那么这个位置是需要转换的,而为了让转换次数最少,也就是说如果多个需要被转换的牛连在一起,我们可以通过一次转化将他们都变成我们想哟的牛。处理这种问题,我个人比较喜欢先生成一个列表长度为N或者N+1一般N+1较为保险(由于有些问题可能会出现下标越界的情况)所以这里也我直接初始化一个列表–>doList = ['0'] * (N+1)
如果说有要求和送到不一样的牛把dolist的下标i(也就是品种不对牛的下标)位置改成1.
把list转成字符串,用python自带方法count一下 ‘01’ 字符串的出现次数,也就是我们要翻的次数。

附上代码

file_in = open('breedflip.in')
N = int(file_in.readline())
A = [i for i in file_in.readline()]#['G', 'H', 'H', 'H', 'G', 'H', 'H']
B = [i for i in file_in.readline()]#['H', 'H', 'G', 'G', 'G', 'H', 'H']
A.pop()
doList = ['0'] * (N+1)
for i in range(N-1,-1,-1):if A[i] != B[i]:doList[i] = '1'
doList.insert(0,'0')
# print(doList)
stringList = ''.join(doList)
# print(stringList)
# print(stringList.count('01'))
file_out = open('breedflip.out','w')
file_out.write(str(stringList.count('01')))

# USACO@2020铜级赛第二题相关推荐

  1. 第十一届蓝桥杯 2020年国赛真题及解析 (Java 大学B组)

    第十一届蓝桥杯 2020年国赛真题 Java 大学B组 A 美丽的 2 B 扩散 C 阶乘约数 D 本质上升序列 E 玩具蛇 F 蓝肽子序列 ​G 皮亚诺曲线距离 H 画廊 I 补给 J 质数行者 所 ...

  2. 【2020团队天梯赛模拟题L2-1】 根据输出序列判断是否是栈的输出结果(C语言)

    [2020团队天梯赛模拟题L2-1] 根据输出序列判断是否是栈的输出结果(C语言) (因为找不到题目只有回忆写题了)题目描述:输出m,n,k3个整数,其中m代表栈的最大存储容量,n代表输出序列的个数, ...

  3. icpc 2020沈阳区域赛补题

    2020沈阳区域赛 H 这题是一道典型dp 但是需要用滚动数组优化空间, 在状态转移的时候需要考虑一下是否满足天数条件. 我真的吐了,debug改了半天之后发现错误原因是: 排序应该是 sort(v+ ...

  4. 信息安全 数据赛 铁人三项_[信息安全铁人三项赛总决赛](数据赛)第二题

    WriteUps 首先根据队友的发现 , 找到了攻击者的 ip : 172.16.10.121 然后这条命令将所有的 http 数据包的请求以及相应全部提取出来 写了一个 Shell 脚本 , 提取完 ...

  5. Newnode‘s NOI 模拟赛 第二题 (单调dp)

    第二题 问题描述 样例输入 1 3 2 *# #* ## 样例输出 1 2 样例输入 2 4 5 *#### *#### *#### #* * * # 样例输出 2 3 提示 对于20%的数据n,m& ...

  6. 蓝桥杯大学JAVA题型_蓝桥杯 2020年省赛真题 10月第二场 (Java 大学B组)

    我是C组的,不过对比一下题目录,大致上也只有三两题的不同 就过程而言我觉得我是爆炸的,当然,就结果而言也是 先挂,自闭会 #A 门牌制作 本题总分:5 分 问题描述 小蓝要为一条街的住户制作门牌号. ...

  7. c语言中猴子拿香蕉的代码题,猴子分香蕉(2018年第九届蓝桥杯省赛第二题)

    ```java /** * 标题:猴子分香蕉 5只猴子是好朋友,在海边的椰子树上睡着了.这期间,有商船把一大堆香蕉忘记在沙滩上离去. 第1只猴子醒来,把香蕉均分成5堆,还剩下1个,就吃掉并把自己的一份 ...

  8. 2019第十届蓝桥杯C/C++ A组省赛 —— 第二题: 数列求值

    试题 B: 数列求值 本题总分:5 分 [问题描述] 给定数列 1, 1, 1, 3, 5, 9, 17, -,从第 4 项开始,每项都是前 3 项的和.求 第 20190324 项的最后 4 位数字 ...

  9. 2013年第四届蓝桥杯C/C++ A组国赛 —— 第二题:骰子迷题

    标题:骰子迷题 小明参加了少年宫的一项趣味活动:每个小朋友发给一个空白的骰子(它的6个面是空白的,没有数字),要小朋友自己设计每个面写哪个数字.但有如下要求: 每个面只能填写 0 至 8 中的某一个数 ...

最新文章

  1. 多分类 数据不平衡的处理 lightgbm
  2. StarlingMVC简介,原理解说及示例源码
  3. 学会放下包袱,热爱单例
  4. python自动抢红包软件_快过年啦,还怕手速慢,我用Python自动抢红包!
  5. mybatisPlus分页限制500条数据
  6. Gym-101466K Random Numbers(线段树,数学,唯一分解定理)
  7. VTK:Qt之ImageDataToQImage
  8. ttl接地是高电平还是低电平_功放技术参数1——高电平
  9. ASP.NET WebForm中使用WebApi
  10. unit英语读音_7款超好玩的英语启蒙APP,假期在家教娃So Easy
  11. 逾期怎么处理_信用卡3万逾期三个月,催收说已经起诉生效,立案处理了,该怎么办?...
  12. 开发者测试android studio 试手
  13. Mysql用户权限管理:Grank和Revoke
  14. S/4 HANA中的数据库锁策略
  15. 怎样高效利用PPT模板网站找到适合自己的PPT模板
  16. 生产线平衡优化毕业论文【flexsim仿真】
  17. 《设计模式》(博客园精华集)
  18. sudo、sudo -s、sudo -i、su 区别
  19. clang diagnostic用例
  20. 有时候,感慨的人生~

热门文章

  1. 什么是交互设计,为什么要进行交互设计
  2. Android进程间通讯AIDL使用及问题详解(雷惊风)
  3. 使用icepdf将pdf转换为图片时出现乱码的问题
  4. ps安装教程以及一些注意事项
  5. Java-基于SSM的健身后台管理系统
  6. 查看 win 系统开机关机,启动时间
  7. 最好用的三款电脑端epub阅读器
  8. 【C++】1、C++ 11新特性
  9. MCU学习——无线遥控模块
  10. 【SparkSQL笔记】SparkSQL的入门实践教程(一)