`
zqynux
  • 浏览: 36810 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

USACO 1.1 Broken Necklace 破碎的项链

阅读更多
Broken Necklace
You have a necklace of N red, white, or blue beads (3<=N<=350) some of which are red, others blue, and others white, arranged at random. Here are two examples for 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

The beads considered first and second in the text that follows have been marked in the picture.

The configuration in Figure A may be represented as a string of b's and r's, where b represents a blue bead and r represents a red one, as follows: brbrrrbbbrrrrrbrrbbrbbbbrrrrb .

Suppose you are to break the necklace at some point, lay it out straight, and then collect beads of the same color from one end until you reach a bead of a different color, and do the same for the other end (which might not be of the same color as the beads collected before this).

Determine the point where the necklace should be broken so that the most number of beads can be collected.

Example
For example, for the necklace in Figure A, 8 beads can be collected, with the breaking point either between bead 9 and bead 10 or else between bead 24 and bead 25.

In some necklaces, white beads had been included as shown in Figure B above. When collecting beads, a white bead that is encountered may be treated as either red or blue and then painted with the desired color. The string that represents this configuration will include the three symbols r, b and w.

Write a program to determine the largest number of beads that can be collected from a supplied necklace.

PROGRAM NAME: beads
INPUT FORMAT
Line 1:  N, the number of beads
Line 2:  a string of N characters, each of which is r, b, or w

SAMPLE INPUT (file beads.in)
29
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb

OUTPUT FORMAT
A single line containing the maximum of number of beads that can be collected from the supplied necklace.
SAMPLE OUTPUT (file beads.out)
11

OUTPUT EXPLANATION
Consider two copies of the beads (kind of like being able to runaround the ends). The string of 11 is marked.
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb wwwbbrwrbrbrrbrbrwrwwrbwrwrrb
                       ****** *****


题目描述
    你有一条由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
            图片 A                        图片  B
               
                        r 代表 红色的珠子     
                            b 代表 蓝色的珠子  
                            w 代表 白色的珠子
第一和第二个珠子在图片中已经被作记号。
图片 A 中的项链可以用下面的字符串表示:

brbrrrbbbrrrrrbrrbbrbbbbrrrrb .
    假如你要在一些点打破项链,展开成一条直线,然后从一端开始收集同颜色的珠子直到你遇到一个不同的颜色珠子,在
另一端做同样的事(颜色可能与在这之前收集的不同)。 确定应该在哪里打破项链来收集到最大多数的数目的子。
例如,在图片 A 中的项链,可以收集到8个珠子,在珠子 9 和珠子 10 或珠子 24 和珠子 25 之间打断项链。 在一些项
链中,包括白色的珠子如图片 B 所示。 当收集珠子的时候,一个被遇到的白色珠子可以被当做红色也可以被当做蓝色。表
现项链的字符串将会包括三符号 r , b 和 w 。 写一个程序来确定从一条被给出的项链最大可以被收集珠子数目。
程序名称
beads



输入格式
第 1 行:  N, 珠子的数目 
第 2 行:  一串度为N的字符串, 每个字符是 r , b 或 w。 



样例输入
(文件 beads.in)

29
wwwbbrwrbrbrrbrbrwrwwrbwrwrrb



输出格式
单独的一行包含从被供应的项链可以被收集的珠子数目的最大值。



样例输出
(文件 beads.out)

11

========================= 华丽的分割线 =========================
  这个题目我用的思路是标程里面的一个代码, 用a表示前一段的连续长度, b表示当前段的连续长度, w表示在当前出现的w的连续数目.. 对于对于循环的话, 就把字符串f再复制一份到f后面....
  啥~? 没看懂~? 看样子对于程序员来说最好的语言是代码:
/*
PROG: beads
ID: zqy11001
LANG: C
*/
#include <stdio.h>
#define getint(i) scanf("%d\n", &n)

int n;
char f[701];

int main(void)
{
	int i, limit;
	int a = 0, b = 0, w = 0;
	char c = '0';
	int m = 0;
	freopen("beads.in", "r", stdin);
	freopen("beads.out", "w", stdout);
	getint(n);
	limit = 2 * n;
	fgets(f, 351, stdin);
	memcpy(f + n, f, n);
	for(i = 0; i < limit; i++){
		if(f[i] == 'w'){
			b++;
			w++;
		}else if(f[i] == c){
			b++;
			w = 0;
		}else{
			if(b + a > m){
				m = b + a;
			}
			a = b - w;
			b = w + 1;
			w = 0;
			c = f[i];
		}
	}
	if(a + b > m){
		m = b + a;
	}
	printf("%d\n", m > n ? n : m);
	return 0;
}

0
0
分享到:
评论

相关推荐

    USACO题目Broken Necklace (beads)及代码解析

    本题是USACO竞赛中的一个经典题目,名为"Broken Necklace (beads)",主要涉及字符串处理、动态规划以及贪心算法。题目要求寻找最优的断点,使得收集到相同颜色珠子的最大数量。以下是相关知识点的详细说明: 1. ...

    [USACO 1.1.4]破碎的项链.cpp

    [USACO 1.1.4]破碎的项链.cpp

    USACO 1.1 c++源程序

    USACO比赛通常使用C++语言进行,因此"USACO 1.1 c++源程序"指的是USACO入门阶段1.1级的C++源代码示例或练习题目解决方案。 对于C++初学者,USACO的这些源代码提供了很好的学习资源。C++是一种强大的、通用的编程...

    usaco 1.1_ride.exe

    usaco 一个众所周知的事实,在每一慧星后面是一个不明飞行物UFO。 这些不明飞行物时常来收集来自在地球上忠诚的支持 者。 不幸地,他们的飞碟在每次旅行只能带上一定数目的支持者。 他们要做的是用一种聪明的方案让...

    usaco 1.1.1

    usaco 1.1.1 这是好东西

    Broken Necklace(参考解析)

    综上所述,这段代码实现了一个解决方案来解决“Broken Necklace”问题,即如何从一条断开的项链中选取最长的一段连续的红色或蓝色珠子。通过双向遍历的方式统计不同颜色珠子的数量,并最终确定最长的连续段。

    USACO官网93题fps格式 OJ题库

    4 [1.1] 坏掉的项链 Broken Necklace 5 [1.2] 命名那个数字 Name That Number 6 [1.2] 挤牛奶Milking Cows 7 [1.2] 方块转换 Transformations 8 [1.2] 回文平方数 Palindromic Squares 9 [1.2] 双重回文数 Dual ...

    usaco.rar_USACO 翻译 下载_usaco _usaco 翻译

    USACO,全称为United States阿Olympiad in Informatics,是美国计算机奥林匹克竞赛,旨在为高中生提供一个学习和展示编程技能的平台。这个比赛涵盖了算法、数据结构以及问题解决等多个方面,对于想要深入理解计算机...

    USACO-Chapter1.rar_it_usaco

    《USACO入门指南——第一章解析》 USACO,全称USA Computing Olympiad,是美国计算机奥林匹克竞赛,旨在培养中学生在算法和编程方面的技能。对于初学者来说,USACO提供了很好的学习路径和挑战。本文将针对USACO的第...

    USACO所有题目题解

    4. **Broken Necklace (beads)**: 这道题涉及项链上的珠子排列问题,原解法是O(n^2),但可以通过类似动态规划的方法优化到O(n)。关键在于将项链视为线性结构,分别记录向左和向右收集蓝红珠子的最优情况。可以使用...

    usaco 2010-2011

    ### USACO 2010-2011 季度竞赛概览与关键信息 #### 一、概述 美国计算机奥林匹克(USACO)是面向全球中学生的计算机科学竞赛,旨在发掘并培养计算机科学领域的年轻人才。USACO 2010-2011 季度竞赛于 2010 年 11 月...

    USACO题集及答案

    USACO,全称为United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者的算法设计、问题解决和编程能力。该比赛每年举行,分为青铜、白银、黄金和铂金四个级别,难度逐渐递增。...

    usaco 合集usaco 合集usaco 合集

    《USACO 合集:全面解析与学习指南》 USACO,全称为USA Computing Olympiad,是一项针对中学生举办的在线编程竞赛,旨在提升参赛者的算法设计和问题解决能力。这个合集提供了丰富的资源,包括英文原题、中文译题、...

    USACO题解(NOCOW整理版).doc

    Chapter 1 Section 1.2 Broken Necklace (beads) 这道题可以使用搜索来解决,使用数组 bl、br、rl、rr 分别记录在项链 i 处向左向右收集的蓝色红色珠子数。项链是环形的,但我们只要把两个同样的项链放在一块,就把...

    USACO英汉对照题目

    1.1.4 "Broken Necklace" 可能涉及字符串操作和链表处理。 1.2.1 "Milking Cows" 可能与数组和排序有关,可能是优化挤牛奶的效率问题。 1.2.3 "Name That Number" 可能是关于数字表示和逻辑推理的问题。 1.2.4 ...

    USACO翻译及题解

    USACO,全称United States Computer Olympiad,是一项面向全球中学生的计算机编程竞赛,旨在提升参赛者在算法设计、问题解决以及计算机科学基础方面的技能。这个压缩包文件提供了丰富的资源,帮助参赛者或学习者更好...

    usaco traning全部数据

    【标题】"usaco traning全部数据" 涉及的是一个编程竞赛训练平台——USACO(USA Computing Olympiad)的数据集。USACO是一个专门为美国中学生设计的在线编程竞赛,旨在提升参赛者的算法设计和编程能力,特别是在解决...

    usaco历年测试数据

    USACO(美国计算机奥林匹克竞赛)是面向全球中学生的一项编程竞赛,主要涉及算法和问题解决能力。这个压缩包文件“usaco历年测试数据”包含了该赛事历年的测试题目和样例输入输出数据,这对于参赛者准备比赛或者提升...

    USACO历年比赛测试数据:2004年

    USACO,全称United States Computer Olympiad,是美国计算机奥林匹克竞赛,是一项旨在培养青少年编程技能和算法理解的国际性比赛。这个比赛对于有志于在计算机科学领域深入发展的学生来说,具有很高的学习价值和挑战...

Global site tag (gtag.js) - Google Analytics