当前位置: 首页 > 面试题库 >

项链断裂问题中的错误答案USACO

戚勇
2023-03-14
问题内容

断项链

您有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放置的信标意味