断项链
您有N条红色,白色或蓝色珠子(3 <= N<=350)的项链,其中有些是红色的,有些是蓝色的,其他的是白色的,随机排列。这是n = 29的两个示例:
1 2 1 2
r b b r b r r b
r b b b
r r b r
r r w r
b r w w
b b r r
b b b b
b b r b
r r b r
b r r r
b r r r
r r r b
r b r r r w
Figure A Figure B
r red bead
b blue bead
w white bead
图片中标记了以下文字中第一和第二个珠子。
图A中的配置可以表示为b和r的字符串,其中b代表蓝色的珠子,r代表红色的珠子,如下所示:brbrrrbbbrrrrrbrrbbrbbbbbrrrrb。
假设您要折断项链,将其笔直摆放,然后从一端收集相同颜色的珠子,直到到达另一种颜色的珠子,然后在另一端进行相同的操作(这可能不是与之前收集的珠子颜色相同)。
确定应该折断项链的位置,以便可以收集最多数量的珠子。
例
例如,对于图A中的项链,可以收集8个珠子,其断裂点在珠子9和珠子10之间,或者在珠子24和珠子25之间。
如上图B所示,在某些项链中还包括白色珠子。收集珠子时,遇到的白色珠子可以当作红色或蓝色,然后涂上所需的颜色。表示此配置的字符串将包括三个符号r,b和w。
编写程序以确定可以从提供的项链中收集的最大珠子数量。
输入格式
第1行:N,珠子的数量第2行:由N个字符组成的字符串,每个字符为r,b或w
29 wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
输出格式
单行包含可从随附项链中收集的最大珠子数量。
11
输出说明
考虑两个副本的珠子(有点像能够绕过两端)。字符串11被标记。
Two necklace copies joined here
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb | wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
******|*****
rrrrrb|bbbbb <-- assignments
5xr .....#|##### 6xb
5+6 = 11 total
这是我遇到的USACO培训问题;我一直得到不正确的答案。…而且请不要告诉我这是愚蠢或愚蠢的;这没有帮助!:D
嘿,我可以解决这个问题,但是我没有为它编写代码的麻烦。无论如何,我的 想法 是这样。
首先,您不需要存储所有的珠子颜色(Go澳大利亚拼写!),只需存储连续多少个相同颜色的珠子。因此对于:
RRBBBWRR
您只需要存储:
2R 3B 1W 2R
要注意的一件事是,如果末尾珠和起始珠子的颜色相同,则必须考虑这一点,因此
RRBBBRR
应该存储为
4R 3B
or
3B 4R
一样。请注意,这样做的原因不是节省内存或其他任何东西,而是确保彼此相邻的珠子是不同的颜色。我们通过组合相同颜色的珠子来做到这一点。
接下来,您要遍历每一个:
-如果是红色,则将所有颜色加起来,直到找到蓝色,然后继续添加,直到找到另一个红色
-如果它是蓝色,则除反转外应进行类似操作
-如果是白色,则下一个珠子将是红色或蓝色。除添加白色珠子数量外,执行上述操作
这里有些例子。序列开始和结束的|标记。
B|RB|R
我们找到一个R,然后一个B,再找到另一个R。因此,我们必须在B处停止。
B|RWRB|R
我们找到一个R,然后找到另一个R,但是我们还没有找到B,因此我们继续。然后我们找到一个B,然后找到另一个R。这一次,因为我们找到了B,所以我们必须停止。
B|RBW|R
我们找到一个R,然后找到一个B,但是由于下一个是W,我们可以继续,然后找到另一个R,所以我们必须停止。在
B|WRBWB|R
我们计算W然后找到R。因此,我们继续直到找到B,然后继续直到找到另一个R。
B|WBRWR|B
是相反的情况。
现在,您要做的就是实现它:D。当然,这没有考虑到R,B和W中实际珠子的数量,而仅仅是单个珠子序列的示例。您将必须检查所有可能的顺序。您还必须注意从头到尾环绕的序列。
最后,您可能会注意到该算法有时很浪费,但N<350,因此即使O(N^3)也应在1秒钟内起作用。也许是2。无论如何,我相信这是O(N ^2),所以您应该能够 _在一秒钟内_运行该程序350次。如果有什么令人困惑的地方,请发表评论,因为我不是最好的解释者。快乐的编码。
下面是SPOJ的一个归档问题。示例测试用例通过了,但我在提交时得到了W/A。我缺少一些测试用例(testCase)。需要帮助来找出我错过了什么案例和/或我做错了什么。 瓢虫艾达正在和她的朋友维尼特玩除数游戏。这个游戏有以下规则。他们之间有一堆石头。移动中的玩家可以选择至少1块,最多σ(N)块石头(其中σ(N)代表N的除数)。显然,N在每次移动后都会发生变化。得不到任何石头(N==0)的人输了。 因
我试着在SPOJ上解决一个问题,我们必须简单地找到给定数组a的最长递增子序列的长度。 我用动态规划O(n^2)算法解决了这个问题,这个解决方案被接受了。。以下是被接受的代码: 但是当我试图用第二种方法(LINK)解决它时,:: ,我得到了错误的答案。 这是我的c代码 我不知道为什么我会得到错误的答案。你能帮我找到这个错误吗。或者站点中给出的基于LCS的LIS算法不正确??
Ant Questions and Answers设计旨在帮助学生和专业人士准备各种Certification Exams和Job Interviews 。 本节提供了一个有用的样本面试问题和多项选择题(MCQ)的集合及其答案和适当的解释。 SN 问题/答案类型<!-- 1 Ant Interview Questions This section provides a huge collectio
Go Questions and Answers设计旨在帮助学生和专业人士准备各种Certification Exams和Job Interviews 。 本节提供了一个有用的样本面试问题和多项选择题(MCQ)的集合及其答案和适当的解释。 Sr.No 问题/答案类型 1 Go面试问题 本节提供了大量的Go面试问题,其答案隐藏在一个方框中,挑战您在发现正确答案之前先了解它们。 2 Go在线测验 本节
问题内容: 以下脚本应返回部门的名称以及这些部门中的雇员人数,市场营销,执行和销售部门的雇员为‘0’,但返回的值为‘1’,而不是‘0’。我该如何纠正? 问题答案: 不要使用数数您想数数的员工。 计算整行。由于在进行计数(*)时,部门中每个部门始终至少会有一个记录,因此您总是会获得至少1条记录 演示
在一条数字线上有n个位于不同位置的信标。第i个信标具有位置Ai和功率电平Bi。当第i个信标被激活时,它摧毁其左侧(坐标递减方向)距离bi(含)内的所有信标。然而,信标本身并没有被摧毁。埼玉县将从右至左一个一个地启动信标。如果一个信标被破坏,它就不能被激活。 埼玉希望Genos在所有现有信标的右边严格地添加一个信标,具有任何位置和任何功率等级,这样尽可能少的信标被破坏。注意,Genos放置的信标意味