Cows on Parade

Farmer John has two types of cows: black Angus and white Jerseys. While marching 19 of their cows to market the other day, John's wife Farmeress Joanne, noticed that all 16 possibilities of four successive black and white cows (e.g., bbbb, bbbw, bbwb, bbww, ..., wwww) were present. Of course, some of the combinations overlapped others.

农夫约翰有两种奶牛:一种是黑色的安古斯,一种是白色的泽西斯。当他在第二天驱赶他奶牛中的19只去市场时候,他的妻子女农场主乔安娜注意到16种所有4只黑白奶牛的顺序排列(例如:黑黑黑黑,黑黑黑白,黑黑白黑,黑黑白白,……,白白白白)都出现了。当然,一些排列是彼此覆盖的。

Given N (2 <= N <= 15), find the minimum length sequence of cows such that every combination of N successive black and white cows occurs in that sequence.

输入中有一个N(2 <= N <= 15),找到一串最小长度的黑白奶牛的排列包括N长度的所有的黑白奶牛顺序排列的情况。

Analysis: The vertices of the graph are the possibilities of N-1 cows. Being at a node corresponds to the last N-1 cows matching the node in color. That is, for N = 4, if the last 3 cows were wbw, then you are at the wbw node. Each node has out-degree of 2, corresponding to adding a black or white cow to the end of the sequence. In addition, each node has in-degree of 2, corresponding to whether the cow just before the last N-1 cows is black or white.

分析:这个图的顶点是n-1长度所有可能奶牛顺序排列。当你在一个顶点是相当你在这个奶牛颜色匹配串的最后n-1只奶牛。这也就是说,对于n=4,如果最后三只奶牛的颜色排列是【白黑白】,然后你正处于【白黑白】这个点。每个点有两个出度——相当于在这个串后面加白牛或黑牛。除此之外,每个点有两个入度——相当于这最后n-1只牛之前的颜色是黑的或白的。

The graph is strongly connected, and the in-degree of each node equals its out-degree, so the graph has a Eulerian circuit.

这个图是强连通的,并且每个图的入度等于每个点的出度,所以这个图有一个欧拉回路。

The sequence corresponding to the Eulerian circuit is the sequence of N-1 cows of the first node in the circuit, followed by cows corresponding to the color of the edge.

这个串就相当于最初的n-1只牛当回路起点的欧拉回路,后面跟着的牛就相当于边的颜色。

如果我跟英语老师说我在周末时间爱好翻译英文网页她会不会表扬我

我个人感觉,这道题翻译出来也是有一点不知所云的。

而且最后"边的颜色"稍微有点问题,因为这道题如果做欧拉不应该是记录边的,是记录点的,我把这道题的思路稍微改动一下,但是大意是不变的,方便理解。希望不是误解……

我们新建一个黑点b一个白点w,发现其实和分析里的描述是等价的一个具有欧拉回路性质的图。

寻找的过程可以抽象成这样,【wbw】后边加了一个b之后到了【bwb】,【wbw】后边加了一个w到了【bww】,然后做下去欧拉回路,相当于在n-1只黑白奶牛的全部可能的顺序排列后都加上b或w形成两个新的串,所以最后得到的回路串即为答案

但是我们既然每条边都要走一遍,那么经过黑点(或白点)到了哪个点已经没有关系了【因为我们所有点都是自己假定的,所以我们可以在我们的意识里假定wbw经过b后就是到的另一个点就是bwb因为路径一定会那么走过一遍的,丝毫不用考虑把这个编进程序】蓝字只是为了帮助理解

那么其实我们只要随便找一个n-1长的串,可以全部初始化为www,bbb之类的,放在前头,如题意建图,写欧拉回路就可以得解

显然,usaco里好像没有这道题……因为网上找不到这道题的题解……希望和我一样有耐心能读完那些英语材料最后碰到这个问题的人不会再懵逼了……

同时假如我们只需要输出长度,可以用这个意识流来证明一下,黑白两点各自经过2^(n-1)次,因为黑白两个点所以是2^n,最后加上n-1所以答案是(2^n)+n-1,n=4时答案是19和题中所叙述的是相同的

USACO 3.3 TEXT Eulerian Tour中的Cows on Parade一点理解的更多相关文章

  1. TPshop中B2C与B2B2C的一点理解

    首先来一段百度百科记录一下: B2C 是Business-to-Customer的缩写,而其中文简称为"商对客"."商对客"是电子商务的一种模式,也就是通常说的 ...

  2. 关于C中函数传参的一点理解

    一般来说c传值分为传值与传指针,Java里没有指针,因此只有传值,但是Java里传值分为简单变量传值和引用型变量传值,从本质上来说这两者没啥区别. 下面主要说的是传参时对原变量的影响: 最初练习创建单 ...

  3. 关于vue自定义事件中,传递参数的一点理解

    例如有如下场景 先熟悉一下Vue事件处理 <!-- 父组件 --> <template> <div> <!--我们想在这个dealName的方法中传递额外参数 ...

  4. Sublime Text 2/3中Autoprefixer失效解决方法

    ###Sublime Text 2/3中Autoprefixer失效解决方法: 相信每个前端er都会使用Subl这款工具吧,因为它有上千款开源的插件,而且功能各异,这里给大家带来的是标题中Autopr ...

  5. 代码实现将键盘录入的数据拷贝到当前项目下的text.txt文件中,键盘录入数据当遇到quit时就退出

    package com.looaderman.test; import java.io.FileNotFoundException; import java.io.FileOutputStream; ...

  6. 关于css中层叠性的一点理解

    关于css层叠性的一点理解 标签(空格分隔): html css 我们平时在写css的时候会遇到这样的情况 <!DOCTYPE html> <html lang="en&q ...

  7. 关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)

    关于HTML中,绝对定位,相对定位的理解...(学习HTML过程中的小记录)   作者:王可利(Star·星星) HTML中 相对定位:position:relative; 绝对定位:position ...

  8. IIFE-js中(function(){…})()立即执行函数写法理解

    介绍IIFE IIFE的性能 使用IIFE的好处 IIFE最佳实践 jQuery优化 在Bootstrap源码(具体请看<Bootstrap源码解析>)和其他jQuery插件经常看到如下的 ...

  9. STL中的set容器的一点总结(转)

    STL中的set容器的一点总结 1.关于set C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list等方便的容器,更重要的是STL封装了许多复杂 ...

随机推荐

  1. Effective C++ 读书总结

    (中文第三版 侯捷 译) 这本书在C++领域也是大名鼎鼎,在微博看到有人说,如果以前学过C语言,那只需花一天时间把 Effective C++ 看一遍,然后再看 leveldb代码(http://t. ...

  2. socket网络编程快速上手(二)——细节问题(4)

    5.慢系统调用及EINTR 还记得前面readn和writen函数么?里面有个EINTR,现在就来谈谈这个,这个很重要. Linux世界有个叫信号的东西,感觉他就像一位隐士,很少遇到他,而他又无处不在 ...

  3. ActionInvoker

    ActionInvoker 还是这张图: 当ControllerFactory生成Controller实例后,这时就需要使用ActionInvoker来选择调用一个合适的Action执行.ASP.NE ...

  4. 鸟哥的LINUX私房菜基础篇第三版 阅读笔记 二

    Linux档案与目录管理 1.一些比较特殊的目录,需要用力的记下来 .         代表当前层目录 ..        代表上一层目录 -        代表前一个工作目录   (这个好屌!其他的 ...

  5. Ping其他电脑ping不通的解决方法

    要想Ping通其他电脑,首先要看被PING的电脑,是否允许PING. 一.在被PING电脑操作系统为XP下分为:1.被PING 电脑关闭了防火墙,就完全可以PING通:2.被PING 电脑开了防火墙, ...

  6. kinect (oldest one) (libfreenect with py_kinect) on linux ubuntu14.04 x64

    freenect libs Where is the resource? Here :P : https://github.com/OpenKinect/libfreenect To make sur ...

  7. linux命令——iotop

    查看CPU使用情况用top,查看I/O使用情况就需要iotop.这个命令是在 kernel v2.6.20中添加,安装的时候要注意内核的版本号. iotop常用快捷键 1. 左右箭头 --> 改 ...

  8. linux sendEmail工具的安装使用

    1.sendEmail的主页http://caspian.dotconf.net/menu/Software/SendEmail/ 下载地址wget http://caspian.dotconf.ne ...

  9. 64win7+64Oracle+32plsql

    1)安装Oracle 11g 64位   2)安装32位的Oracle客户端( instantclient-basic-win32-11.2.0.1.0) 下载instantclient-basic- ...

  10. Embedded Linux Primer----嵌入式Linux基础教程--导论

    第一章 导论 在这一章里(将要学习到) 为什么是Linux 嵌入式Linux现状 开源和GPL(译者:通用公共许可证) 标准和有关团体 本章总结 放弃专有操作系统正在许多传统嵌入式操作系统公司引起一阵 ...