【洛谷】P3741 honoka的鍵盤(暴力)

P3741 honoka的鍵盤

題目背景

honoka 有一個只有兩個鍵的鍵盤。ios

題目描述

一天,她打出了一個只有這兩個字符的字符串。當這個字符串裏含有"VK"這個字符串的時候,honoka 就特別喜歡這個字符串。因此,她想改變至多一個字符(或者不作任何改變)來最大化這個字符串內"VK"出現的次數。給出原來的字符串,請計算她最多能使這個字符串內出現多少次"VK"。(只有當"V"和"K"正好相鄰時,咱們認爲出現了"VK"。)spa

輸入輸出格式

輸入格式:code

 

第一行給出一個數字 n,表明字符串的長度。第二行給出一個字符串 s。blog

 

輸出格式:字符串

 

第一行輸出一個整數表明所求答案。get

 

輸入輸出樣例

輸入樣例#1:  複製
2
VK
輸出樣例#1:  複製
1
輸入樣例#2:  複製
2
VV
輸出樣例#2:  複製
1
輸入樣例#3:  複製
1
V
輸出樣例#3:  複製
0
輸入樣例#4:  複製
20
VKKKKKKKKKVVVVVVVVVK
輸出樣例#4:  複製
3
輸入樣例#5:  複製
4
KVKV
輸出樣例#5:  複製
1

說明

對於 100%的數據,1<=n<=100 。string

【題解】【分三種狀況判斷:①當前位是V,下一位是K;②當前位是V,下一位不是K但更換成K;③當前位是K,前一位不是V,將前一位轉變成V,但要考慮前一位是否與再前面的一位已構成VK並計入計數器了。io

注意判斷臨界,i注意至多隻能改變一個字符!因此在第二三種狀況時,每一次枚舉改變一字符都要將後面全部的VK枚舉完做爲當前狀況的答案】class

#include<cmath>
#include<cstdio>
#include<cstdlib> 
#include<cstring>
#include<iostream>
using namespace std;
char ch[110];
int num,sum,n;
bool p[110];
int main(){
    int i,j;
    scanf("%d\n",&n);
    gets(ch); i=0;
    memset(p,1,sizeof(p));
    while(i<n)
     {
         if(ch[i]=='V'&&ch[i+1]=='K') num++,p[i]=0,p[i+1]=0,i++;
         if(p[i]&&p[i+1]&&ch[i]=='V'&&ch[i+1]!='K'&&i+1<n)
          {
              int t; t=num+1;
              for(j=i+2;j<n-1;++j)
              if(ch[j]=='V'&&ch[j+1]=='K') t++;
            sum=max(sum,t);
          }
        if(p[i]&&p[i-1]&&ch[i]=='K'&&i>0&&ch[i-1]!='V')
         {
             int t; t=num+1;
             for(j=i+1;j<n;++j)
              if(ch[j]=='V'&&ch[j+1]=='K') t++;
             sum=max(sum,t);
         }
        i++;
     }
    sum=max(sum,num);
    printf("%d\n",sum);
    return 0;
}
相關文章
相關標籤/搜索