去掉题目的背景:就是一个环形的串中,寻找一个最长的子串,该串由前后由俩部分组成,连续的b串和连续的r串,当然,一种颜色也可以;w可转变成任意颜色;

我的思路:比较简单的思路,但是是一个复杂度O(n^2)的算法;

先求出以每一个位置开始的最长串的长度,再找出可衔接的最长串即可;

USACO上面有更快的O(n)算法。

Holland's Frank Takes has a potentially easier solution: /* This solution simply changes the string s into ss, then for every starting
// symbol it checks if it can make a sequence simply by repeatedly checking
// if a sequence can be found that is longer than the current maximum one.
*/#include <iostream>
#include <fstream>
using namespace std;int main() {fstream input, output;string inputFilename = "beads.in", outputFilename = "beads.out";  input.open(inputFilename.c_str(), ios::in);output.open(outputFilename.c_str(), ios::out);int n, max=0, current, state, i, j;string s;char c;input >> n >> s;s = s+s;for(i=0; i<n; i++) {c = (char) s[i];if(c == 'w')state = 0;elsestate = 1;j = i;current = 0;while(state <= 2) { // dont go further in second string than starting position in first stringwhile(j<n+i && (s[j] == c || s[j] == 'w')) { current++;j++;} // whilestate++;c = s[j];} // whileif(current > max)max = current;} // foroutput << max << endl;return 0;
} // main

/*
ID: nanke691
LANG: C++
TASK: beads
*/
#include<iostream>
#include <fstream>
#include<string.h>
using namespace std;
char s1[700];
int dp[355];
int main()
{int n;FILE *fin  = fopen ("beads.in", "r");FILE *fout = fopen ("beads.out", "w");//while(scanf("%d",&n)==1)//{fscanf(fin,"%d",&n);fscanf(fin,"%s",s1);for(int i=0;i<n;i++)s1[i+n]=s1[i];s1[2*n]='\0';//puts(s1);int flag=0;memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){   if(s1[i]=='w')flag=1;else flag=0;char temp=s1[i];for(int j=i+1;j<2*n;j++){if(flag&&s1[j]!='w'){flag=0;temp=s1[j];}if(temp==s1[j]||s1[j]=='w')dp[i]++;else break;}dp[i]++;}//for(int i=0;i<n;i++)//   printf("%d ",dp[i]);//cout<<endl;int max1=-1;for(int i=0;i<n;i++){int t=dp[i],sum;if(t>n) sum=dp[i]+dp[t-n];else sum=dp[i]+dp[t+i];if(sum>max1)max1=sum;if(max1>=n){max1=n;break;}}fprintf(fout,"%d\n",max1);//}return 0;
}

转载于:https://www.cnblogs.com/nanke/archive/2011/10/10/2206514.html

USACO Broken Necklace相关推荐

  1. USACO Broken Necklace 题解(环展开成链,枚举)

    题目大意:有一个项链,由红.蓝.白三种颜色的珠子组成,然后现在选择项链中的某一处断开,然后沿断开处的两个珠子分别查找,直至找到一个颜色不同的珠子,并统计个数(其中颜色以第一个非白色的为准,白色的珠子可 ...

  2. USACO Broken Necklace模拟

    article 破碎的项链  你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子:                 ...

  3. USACO - Chapter1 Section 1.1 - Broken Necklace

    Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在 ...

  4. 洛谷 P1203 [USACO1.1]坏掉的项链Broken Necklace

    P1203 [USACO1.1]坏掉的项链Broken Necklace 题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 ...

  5. 破碎的项链 Broken Necklace

    破碎的项链 Broken Necklace.cpp 自 信 地 说 这 道 题 我 做 过 --------------分割线------------------ 从中间开始,然后找到第三个点(是w) ...

  6. Broken Necklace破碎的项链

    Broken Necklace破碎的项链 你有一条由 N 个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子:         ...

  7. USACO Section 1.2 Broken Necklace

    题目 题目分析 推的过程 需要避免的坑 整体代码 USACO的题解 题目 题目描述 输入描述 Line 1: N, the number of beads Line 2: a string of N ...

  8. Broken Necklace(USACO官方)

    复杂度为O(n2): #include <stdio.h> #include <string.h> #include <assert.h>#define MAXN ...

  9. USACO Training Section 1.1 坏掉的项链Broken Necklace

    题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...

最新文章

  1. Hibernate基本原理(一)
  2. Spark与Flink:对比与分析
  3. JavaWeb程序设计任务教程(黑马程序员 传智播客)测一测 编写一个Servlet,实现统计网站被访问次数的功能
  4. 完整的Web应用程序Tomcat JSF Primefaces JPA Hibernate –第3部分
  5. linux命令之PS
  6. STM32工作笔记0067---SPI接口原理与配置
  7. 2011下半年信息系统项目管理师考后感
  8. C学习笔记之---八皇后算法
  9. 最适合学英语的50部动画电影(高清画质mkv,双语/双字幕可切换)
  10. 数学专业偏向算法智力题的面试题
  11. 面试中的Singleton
  12. crm管理系统是什么意思 crm系统全称是什么 - whale帷幄
  13. Web全栈开发1+x(中级)PHPMySQL知识
  14. Profibus DP-Slave in C
  15. 路由声明式传参和编程式传参
  16. Unity URP渲染管线下体积光的实现
  17. 烤仔星选·币圈非著名正指 | DeFi安全篇:合约留后门,无脑授权有风险
  18. Pytorch机器学习(三)——VOC数据集转换为YOLO数据集
  19. 十天小白训练营day02—古诗作业
  20. TPS5430电路仿真与实测对比分析

热门文章

  1. php下载数组里的图片,php 读取txt文件中的内容,转换成数组,根据URL将图片下载到本地(curl爬取)...
  2. python image.open函数_PIL.Image.open和cv2.imread的比较与相互转换的方法
  3. 用python实现求最大公约数_python实现求最大公约数与最小公倍数
  4. php db类 应用实例,PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
  5. html 刷新div_HTML悬浮星星:
  6. 接口规范 5. 点播流相关接口
  7. Python的文件锁使用
  8. Angular6入门
  9. VMware虚拟机Bridged(桥接模式)
  10. Python websocket