PPC 만들기

시간 제한1초메모리 제한1024 MB

요약
P와 C로 이루어진 문자열에서 두 위치를 바꾸는 연산을 최대 K번 해서, 앞 두 문자가 P이고 세 번째가 C인 삼중항의 개수를 최대로 만든다.
난이도

어려움10점 중 8점

유형
그리디, 누적 합, 수학, 구현
정답자
아직 제출이 없습니다

문제

포닉스에게는 아끼던 문자열 SS가 있다. SS는 길이가 NN이며 알파벳 대문자 C와 P만으로 이루어져 있는 문자열이다. 문자열 SS의 ii번째 문자는 S_iS\_i와 같이 나타낸다.

포닉스는 PPC에 참가하는 팀들을 위해 문자열 SS로 대회장을 장식하려 한다. 포닉스는 대회 전, SS에 다음과 같은 연산을 최대 KK번 시행할 수 있다.

  • 1≤i<j≤N1 \le i < j \le N인 두 정수 ii, jj를 골라 S_iS\_i와 S_jS\_j를 바꾼다.

포닉스의 목표는 완성된 문자열 SS에 PPC 부분문자열이 가장 많게 하는 것이다. PPC 부분문자열의 개수란, 1≤i\<j\<k≤N1 \le i\<j\<k \le N이고 S_i=S_j=S\_i=S\_j=P, S_k=S\_k=C인 (i,j,k)(i,j,k)의 개수를 의미한다.

포닉스가 만들 수 있는 PPC 부분문자열의 개수의 최댓값을 구하여라.

입력

첫 번째 줄에 문자열 SS의 길이 NN과 연산의 최대 사용 횟수 KK가 공백으로 구분되어 주어진다. (1≤K≤N≤200,0001\le K\le N\le 200\\,000)

두 번째 줄에 길이가 NN인 문자열 SS가 주어진다. SS는 알파벳 대문자 C와 P만으로 이루어져 있음이 보장된다.

출력

포닉스가 만들 수 있는 PPC 부분문자열의 개수의 최댓값을 출력한다.

예제3

  1. 예제 1

    입력
    3 1
    CPP
    
    예상 출력
    1
    
  2. 예제 2

    입력
    8 2
    CCPCPPCP
    
    예상 출력
    21
    
  3. 예제 3

    입력
    3 1
    CPC
    
    예상 출력
    0