Codeforces Round #108 (Div. 2)

C. Pocket Book

题意

  • 给定\(N(N \le 100)\)个字符串,每个字符串长为\(M(M \le 100)\)。
  • 每次选择\(i, j, k\),然后交换串\(i\)和串\(j\)的长度为\(k\)的前缀。
  • 操作可以做任意次,求最多能得到多少不同的字符串,\(modulo (10^9+7)\)。

思路

  • 相当于每个位置的可选字符为该列的不同字符的数量。

代码


D. Frames

题意

  • 给定一个\(n \times m(3 \le n,m \le 1000)\)的矩阵,由'.'和'#'构成。
  • 两个矩形框放入该矩阵,'#'表示格子被矩形框覆盖,且边长均不小于3。
  • 两个矩形框的关系是任意的,重边、重叠,甚至完全重叠也是可以的。
  • 判断原矩阵是否能由两个矩形框表示,若可以输出"YES"以及两个矩形框的左上角坐标和右下角坐标,否则输出"NO"。

思路

  • 找出横向长度大于2的行号,显然只有最小值,次小值,最大值,次大值有可能成为矩形框的横坐标。
  • 暴力枚举判定即可。

代码


E. Garden

题意

  • 一个\(n \times m(1 \le n,m \le 100,n \cdot m \le 200)\)的网格,有\(k(k \le 7)\)的格子必须要覆盖,且任意两个格子之间要存在一条路径(相邻格子有一条公共边)。
  • 覆盖格子\((i,j)\)的代价为\(a(i,j)\)。
  • 求最小代价,并输出一种方案,'X'表示覆盖,'.'表示未覆盖。

思路

  • 用\(f[u][mask]\)表示格子覆盖状态\(mask\)且集中到\(u\)的最小代价。
  • 转移:\[f[u][mask]=min{f[u][submask] + f[u][mask \oplus submask] - v[u]}\]
    \(v[u]\)表示点\(u\)的覆盖代价,即\(a[i = u / m][j = u \% m]\)
    当状态\(mask\)集中到\(u\)之后,可以走到或者说扩展到其他点\(v\),这个bfs一下即可。

代码

最新文章

  1. 定位form光标行
  2. Ajax异步刷新,测试用户名是否被注册
  3. ios广告
  4. ArcGIS Engine开发之旅02--ArcGIS Engine中的类库
  5. 李洪强漫谈iOS开发[C语言-041]-计算月份天数
  6. LINQ的基本用法
  7. Python新手学习基础之运算符——比较运算符
  8. linux新学篇
  9. python3 字符串操作相关函数
  10. jsp/servlet学习四之jsp初窥
  11. github实验三结对报告
  12. 你知道CSS实现水平垂直居中的第10种方式吗?
  13. python 视频处理,提取视频相关帧,读取Excel
  14. 大家都对vertical-align的各说各话
  15. go语言进阶之为结构体类型添加方法
  16. 一个hql语句
  17. [HTML] 模板的用法
  18. c# 在WebBrowser中用SendMessage模拟鼠标点击
  19. C++模(mú )板秘籍
  20. go排序后索引

热门文章

  1. DotNetBar v12.9.0.0 Fully Cracked
  2. swing LayoutManager 和多态
  3. 用Quartz进行作业调度(转)
  4. php中常用的运算符
  5. CentOS中配置LNMP环境打开提示File not found
  6. BZOJ 1816 扑克牌
  7. Matrix_二维树状数组
  8. 解决:子元素设置margin-top,父元素也受影响的问题
  9. HDU 3791
  10. matlab产生正态分布样本