1. 程式人生 > >洛谷 P3741 honoka的鍵盤 題解

洛谷 P3741 honoka的鍵盤 題解

else article algo ret 一個 blog 而且 pre ble

此文為博主原創題解,轉載時請通知博主,並把原文鏈接放在正文醒目位置。

題目鏈接:https://www.luogu.org/problem/show?pid=3741

題目背景

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

題目描述

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

輸入輸出格式

輸入格式:

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

輸出格式:

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

輸入輸出樣例

輸入樣例#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 。

分析:

很水qwq但是有幾個坑點,而且50個測試點真是夠了...

AC的時候可壯觀了qwq

AC代碼:

 1 #include<cstdio>
 2 #include<algorithm>
 3 #include<cstring>
 4 char a[110];
 5 int ans;
 6 bool jud = false;
 7 int main()
 8 {
 9     int n;
10     scanf("%d",&n);
11     scanf("%s",a);
12     for
(int i = 1;i < n;++ i) 13 { 14 if(a[i] == K && a[i-1] == V) 15 ans ++,i ++; 16 else if(jud == false) 17 {//下面的判斷是重點...少考慮了就會掛 18 if(a[i] == K && a[i-1] == K && (i < 2 || a[i-2] != V)) 19 a[i-1] = V,ans ++,jud = true; 20 if(a[i] == V && a[i-1] == V && a[i+1] != K) 21 a[i] = K,ans ++,jud = true; 22 } 23 } 24 printf("%d\n",ans); 25 return 0; 26 }

洛谷 P3741 honoka的鍵盤 題解