PROBLEM LINK:
Author: Shivam Rathore
Tester: Hanlin Ren
Editorialist: Hanlin Ren
DIFFICULTY:
CAKEWALK
PREREQUISITES:
None
PROBLEM:
Chef has a string consisting of only lowercase letters a-z. He wants to pick 4 consecutive letters from the string such that the 4 letters can be arranged into the word chef. Find the number of ways to do this.
EXPLANATION:
The solution is straightforward. Let the string be s[0\dots(n-1)]. Let’s enumerate the start point of these letters, say i. Then 0\le i\le n-4. The four letters are s[i],s[i+1],s[i+2],s[i+3]. To check if they can be arranged into chef, we can sort these letters and check if they form cefh in order. Let me explain in details.
Checking four letters
First, we need a subprocedure which given 4 letters s1, s2, s3, s4, determine if they can be reordered into chef. Let’s call it check(s1, s2, s3, s4). A method to do this is to sort the letters, and the result of sorting should be cefh. C++ code:
bool check(char s1, char s2, char s3, char s4) {
char s[5] = {s1, s2, s3, s4, 0};
sort(s, s + 4);
return strcmp(s, "cefh") == 0;//strcmp returns 0 if two strings are equal
}
The 0 at the end of array s is necessary, since strcmp recognizes it as the end of string. Or, if you don’t like strcmp, the last line can be written as
return s[0]=='c' && s[1]=='e' && s[2]=='f' && s[3]=='h';
The original problem
Given the subprocedure check, the rest is easy:
- We enumerate the start i of the four letters. Let n be the length of string, we have 0\le i\le n-4, and four letters are
s[i],s[i+1],s[i+2],s[i+3]; - If
check(s[i],s[i+1],s[i+2],s[i+3]), the answer is increased by 1; - At last, if answer is 0, output
normal; otherwise outputlovelyand the answer.
Code:
n = strlen(s); //s[0..n-1]
answer = 0;
//check all possible i's
for (i = 0; i <= n - 4; i++)
if (check(s[i], s[i + 1], s[i + 2], s[i + 3]))
answer += 1;
//output answer
if (answer == 0) printf("normal\n");
else printf("lovely %d\n", answer);
AUTHOR’S AND TESTER’S SOLUTIONS:
Author’s solution can be found here.
Tester’s solution can be found here.