码迷,mamicode.com
首页 > 其他好文 > 详细

USACO Broken Necklace

时间:2014-08-22 23:48:29      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   for   ar   问题   div   

这么个所谓简单的题目弄了一下午加一晚上,呵呵,怎么也算不对。

一定会有一个简单的方法。

晚上去新都回来后,又坐在电脑面前思索这个问题。

多次删除写出的眼看就要成功的代码,因为不够简洁。

突然顿悟:

1.串相联;

假设数数当前位置为pos;

2.k[pos]==‘w‘,不可能是最大。

3.k[pos+1]==‘w‘,不可能是最大。

4.k[pos]=k[pos+1],不可能是最大。

5.pos==0,不能往左数。

所以,

6.只有k[pos]!=k[pos+1]才有可能数出最大:

即‘r‘,‘b‘,或‘b‘,‘r‘这种组合才可能最大。

所以,最后的算法是,找到合适的pos,

从pos往左数+从pos+1往右数这些组合,找出最大的,呵呵!

/*
ID: qq104801
LANG: C
TASK: beads.c
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* for debug only:counter
*/
void debug_dummy(void)
{
    return;
}

int n;
char k[600];

int count(int pos)
{
    int index=0;    
    int l=1,r=1;
    if (k[pos]==w || k[pos+1]==w || k[pos]==k[pos+1] || pos<1)
        return 1;
    index=pos;

    while(--index && index>=0)
    {
        if ((k[index]==k[pos]) || (k[index]==w))
            l++;
        else
            break;
    }

    index=pos+1;
    while(++index && k[index]!=\0)
    {
        if ((k[index]==k[pos+1]) || (k[index]==w))
            r++;
        else
            break;
    }
    //printf("pos:%d  l:%d  r:%d l+r:%d\n",pos,l,r,l+r);
    return l+r;
}

void init()
{
    int i;
    int cc=0;
    char c1,c2;
    c1=\0;
    i=n-1;    
    while(i++)
    {       
        cc++;
        k[i]=k[i-n];
        if (k[i]!=k[0])
        {
            c1=k[i];
        }
        if (c1!=\0 && k[i]!=c1)
            break;
    }
    k[++i]=\0;
    //printf("cc;%d\n",cc);
    //printf("k:%s\n",k);
}

main () {    
    FILE *fin = fopen ("beads.in", "r");
    FILE *fout = fopen ("beads.out", "w");    
    fscanf(fin,"%d",&n);
    fscanf(fin,"%s",&k);  
    //printf("n:%d\n",n);
    //printf("k:%s\n",k); 
    init();
    int i;
    int max,t;
    t=0;
    max=0;
    for(i=0;i<n;i++)
    {
        t=count(i);
        if (max<t)
            max=t;
    }
    //printf("max:%d\n",max);

    fprintf(fout,"%d\n",max);

    fclose(fin);
    fclose(fout);
    exit (0);
}

 

USACO Broken Necklace

标签:style   blog   color   os   io   for   ar   问题   div   

原文地址:http://www.cnblogs.com/dpblue/p/3930382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!