• 破碎的项链


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

    第一和第二个珠子在图片中已经被作记号。 

    图片 A 中的项链可以用下面的字符串表示: 

    brbrrrbbbrrrrrbrrbbrbbbbrrrrb

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

    第一遍:最直白

    思路:

      1、遍历每一个字符,遇到‘w’则pass,‘r’和‘b’执行操作

      2、对于执行操作的字符,分两个方向,因为断链出来了两段;对于每一个方向,还包含两个子方向,使用while循环进行爬链

      1 #include <iostream>
      2 #include <cstring>
      3 using namespace std;
      4 char arr[360];
      5 int n;
      6 void solve()
      7 {
      8     //Init
      9     memset(arr,0,360*sizeof(char));
     10     cin>>n;
     11     cin>>arr;
     12     //solveIt
     13     int j,Max=0;
     14     for(int i=0; i<n; i++)
     15     {
     16         if(arr[i]=='w')
     17             continue;
     18         //pass 'w',from 'r'and'b'
     19         int max1=0,ct=1;
     20         char ch = arr[i];
     21         j = i;
     22         bool jdg = true;
     23         //inOrder
     24         while(jdg)
     25         {
     26             //ct=1/ct=2
     27             if(ct==1&&(arr[j]=='w'||arr[j]==ch))
     28             {
     29                 j = (j+1)%n;
     30                 max1++;
     31             }else if(ct==1&&arr[j]!=ch){
     32                 j = (i==0)?(n-1):(i-1);
     33                 ct++;
     34                 if(arr[j]=='w'||arr[j]==ch){
     35                     max1++;
     36                     j = (j==0)?(n-1):(j-1);
     37                 }
     38                 else
     39                 {
     40                     max1++;
     41                     ch = arr[j];
     42                     j = (j==0)?(n-1):(j-1);
     43                 }
     44             }else if(ct==2&&(arr[j]=='w'||arr[j]==ch))
     45             {
     46                 max1++;
     47                 j = (j==0)?(n-1):(j-1);
     48             }else if(ct==2&&arr[j]!=ch&&arr[j]!='w')
     49             {
     50                 jdg = false;
     51             }
     52             else
     53                 continue;
     54             //general
     55             if(max1>n){
     56                 max1 = n;
     57                 jdg=false;
     58             }
     59         }
     60         //backOrder
     61         int max2=0;
     62         ct=1;
     63         jdg = true;
     64         j = (i==0)?(n-1):(i-1);
     65         ch = arr[j];
     66         while(jdg)
     67         {
     68             if(ct==1&&(arr[j]=='w'||arr[j]==ch)){
     69                 j = (j==0)?(n-1):(j-1);
     70                 max2++;
     71             }else if(ct==1&&arr[j]!=ch){
     72                 j = i;
     73                 ct++;
     74                 if(arr[j]=='w'||arr[j]==ch){
     75                     max2++;
     76                     j = (j+1)%n;
     77                 }else{
     78                     ch = arr[j];
     79                     max2++;
     80                     j = (j+1)%n;
     81                 }
     82             }else if(ct==2&&(arr[j]=='w'||arr[j]==ch)){
     83                 max2++;
     84                 j = (j+1)%n;
     85             }else if(ct==2&&arr[j]!='w'&&arr[j]!=ch){
     86                 jdg=false;
     87             }
     88             if(max2>n){
     89                 max2 = n;
     90                 jdg=false;
     91             }
     92         }
     93         Max = Max>max1?Max:max1;
     94         Max = Max>max2?Max:max2;
     95     }
     96     if(Max)
     97         cout<<Max<<endl;
     98     else
     99         cout<<n<<endl;
    100 }
    101 int main()
    102 {
    103     solve();
    104     return 0;
    105 }
    First

     

  • 相关阅读:
    【VectorDemo】
    【列表迭代器:添加元素】
    【列表迭代器】
    【迭代器】
    【LinkedList】
    【list 集合的使用】
    【CollectionDemo2】
    【CollectionDemo1】
    【集合和数组的区别?】
    【到底使用那种集合?】
  • 原文地址:https://www.cnblogs.com/guoyujiang/p/11823521.html
Copyright © 2020-2023  润新知