honoka 有一個只有兩個鍵的鍵盤。ios
一天,她打出了一個只有這兩個字符的字符串。當這個字符串裏含有"VK"這個字符串的時候,honoka 就特別喜歡這個字符串。因此,她想改變至多一個字符(或者不作任何改變)來最大化這個字符串內"VK"出現的次數。給出原來的字符串,請計算她最多能使這個字符串內出現多少次"VK"。(只有當"V"和"K"正好相鄰時,咱們認爲出現了"VK"。)spa
輸入格式:code
第一行給出一個數字 n,表明字符串的長度。第二行給出一個字符串 s。blog
輸出格式:字符串
第一行輸出一個整數表明所求答案。get
對於 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; }