Codeforces Round #110 (Div. 2)

C. Message

题意

  • 给两个长度不超过2000的字符串\(s,u\),仅由小写字母构成。
  • 找出\(s\)的一个子串\(t\),通过3种操作变换成字符串\(u\):
  1. 在首或尾添加一个字符;
  2. 删除首或尾的一个字符;
  3. 改变某个位置的字符。
  • 求最小的操作步数。

思路

  • 因为删除、插入的代价和修改的代价一样,显然找出和\(u\)长度一样的子串\(t\)可以求得最小代价。
  • 显然\(u\)可以只匹配\(s\)的一个前缀或后缀,可以通过在\(s\)首或尾添加非字母字符。

代码


D. Suspects

题意

  • 有\(N(N \le 10^5)\)个嫌疑人,其中一个是凶手。
  • 每个人会有一个回答(\(+a_i或-a_i\)),分别表示\(i\)认为\(a_i\)是凶手和不是凶手。
  • 已知全部回答中只有\(m\)个回答是真的,其余都是假的。
  • 对于每个回答,判定嫌疑人是否在说谎,输出\(Truth\)或\(Lie\),如果无法判断,则输出\(Not defined\)。

思路

  • 判断一个人是否是凶手:统计认为\(i\)是凶手的数量\(c[i]\),以及认为\(i\)不是凶手的数量\(nc[i]\),则为真的回答数=\[c[i]-nc[i]+\sum_{j=1}^{n}{nc[j]}\]
  • 假定\(i\)是凶手,则\([1, i)\)和\((i, n]\)的人不是凶手。维护\(L\)的最大值,\(R\)的最小值,使得\([1, L)\)和\((R, n]\)的人不是凶手。
  • 当\(a_i\)可能是凶手,也可能不是凶手时,就无法判断嫌疑人的回答是否撒谎。

代码


E. Cipher

题意

  • 给长度不超过100的字符串\(s\)。
  • 有两种操作,每次操作选择一个位置\(p(1 \le p \lt |s|)\):
  1. \(++s_p, --s_{p+1}\)
  2. \(--s_p, ++s_{p+1}\)
  • 经过若干次操作,变成了串\(t\),求不同的串\(t\)的数量。

思路

  • 认真想一下的话,可以发现串的总和是不变的,两种操作想当于把1扔到相邻的位置上。
  • 那么用\(f[i][j]\)表示i个字符组成和为j的方案数即可。

代码

最新文章

  1. html理解
  2. C# 判断 当前设备的IP地址、默认网关、子网掩码在不在同一网段内
  3. [AngularJS] 常用指令
  4. swift学习笔记之-构造过程
  5. iOS开发--storyboard适配pin
  6. Learning WCF Chapter2 Data Contracts
  7. php获取当前文件绝对路径
  8. js遍历table 和 jquery 遍历table
  9. centos 创建用户组及用户
  10. MySQL错误:2003-Can't connect to MySQL server on 'localhost'(10061 "unknown error")
  11. linux系统磁盘空间满了怎么办看完这篇文章之后就知道怎么解决了
  12. 公司间INVOICE的库存设置
  13. Python基础3(2017-07-20)
  14. Hadoop shell命令
  15. Codeforces 660C - Hard Process - [二分+DP]
  16. 10: Celery
  17. java中事件驱动
  18. Azure 中的虚拟网络和虚拟机
  19. Web挂马方式整理
  20. 20145206邹京儒Exp6 信息搜集与漏洞扫描

热门文章

  1. DotNetBar v12.1.0.0 Fully Cracked
  2. linux exec用法总结
  3. matlab 画框(二) 去白边
  4. SharePoint开发 - 使用Session(代码修改webconfig)
  5. JVM-运行时数据区
  6. LeetCode222 Count Complete Tree Nodes
  7. CGI标准简介 ~ Django
  8. Python 第三方模块安装出现的问题和解决方案.
  9. 想调试,装了个Zend Server
  10. 一个经典例子让你彻彻底底理解java回调机制