• Broken Necklace


    /*
    ID: lxlenovos1
    PROG: beads
    LANG: C++
    */
    
    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    
    using namespace std;
    
    typedef struct ring
    {
            char a;
            struct ring *flink;
            struct ring *slink;
    } ring;
    
    
    ring* sring = NULL;
    ring* hring = NULL;     /* the first node */
    ring* ering = NULL;     /* the end node */
    int fcout = 0;
    int rcout = 0;
    ring* bring = NULL;
    
    void ring_pushback( ring* r, int n )
    {
            static int i = 0;
    
            if ( i == 0 )
            {
                    sring = r;
                    ++i;
    
                   ++i;
                    hring = r;
            }
            else
            {
                    sring->slink = r;
                    r->flink = sring;
    
                    sring = r;
    
                    /* the end node */
                    if ( i == n - 1 )
                    {
                            sring->slink = hring;
                            hring->flink = sring;
                            ering = sring;
                    }
    
                    ++i;
            }
    
    }
    
    
    int get_maxresult( ring *gring )
    {
            // cout the list
            ring* p = NULL;
            char tempvalue;
    
            fcout = 1;
            rcout = 1;
            p = gring;
            tempvalue = p->a;
    
            //cout << "temp1 is " << tempvalue << endl;     
    
            do
            {
    
                  //tempvalue = p->a;
                    p = p->slink;
    
                    //cout  << p->a << endl; 
                    if ( p->a == tempvalue || p->a == 'w' || tempvalue == 'w' )
                    {
                            if ( tempvalue == 'w' )
                                    tempvalue = p->a;
    
    
    
                            if ( 0 == fcout )
                                    fcout = 1;
                            ++fcout;
                            //cout << "1" << endl;
                    }
                    else
                    {
                            //cout << "2" << endl;
                            break;
                    }
    
            }while( p != gring );
    
            if ( p == gring )
                    goto __cout;
    
            p = gring->flink;
            tempvalue = p->a;
    
            //cout << "temp2 is " << tempvalue << endl;
    
            do
            {
                  //tempvalue = p->a;
                  p = p->flink;
    
                  //cout << p->a << endl;
    
              if ( p->a == tempvalue || p->a == 'w' || tempvalue == 'w' )
                    {
                            if ( tempvalue == 'w' )
                                    tempvalue = p->a;
    
                            if ( 0 == rcout )
                                    rcout = 1;
                            ++rcout;
                            //cout << "1" << endl;
                    }
                    else
                    {
                            //cout << "2" << endl;
                            break;
                    }
    
            }while( p != gring );
    
            return ( rcout + fcout );
    
            __cout:
                    rcout = 0;
                    fcout--;
                    return ( rcout + fcout );
    }
    
    
    int main( void )
    {
    
            ofstream fout( "beads.out" );
            ifstream fin( "beads.in" );
    
            int n, i, result;
            char temp;
            int max = 0;
            ring* g = NULL;
    
            //cin >> n;
            fin >> n;
    
            for ( i = 0; i < n; ++i )
            {
                    //cin >> temp;
                    fin >> temp;
    
                    ring* bread = new ring;
                    bread->a = temp;
                    bread->flink = NULL;
                    bread->slink = NULL;
    
                    ring_pushback( bread, n );
            }
    
            //cout << "cin is end and the result is:" << endl;
    
            g = hring;
            for ( i = 0; i < n; ++i )
            {
                    result = get_maxresult( g );
                    //cout << "result is " << result << endl;
    
                    if ( result > max )
                            max = result;
    
                    if ( max >= n )
                    {
                            max = n;
                            break;
                    }
    
                    g = g->slink;
                    //cout << g->a << endl;
            }
    
            //cout << max << endl;
            fout << max;
            fout << endl;
    
            exit( 0 );
    }
    

      

  • 相关阅读:
    IOS第一天
    Mac环境下svn的使用
    惯用代码
    ORA-12170: TNS: 连接超时
    java字符集
    java移位运算
    mysql面试题
    mysql覆盖索引(屌的狠,提高速度)
    Cannot call sendError() after the response has been committed
    maven生命周期
  • 原文地址:https://www.cnblogs.com/lxgeek/p/2134233.html
Copyright © 2020-2023  润新知