Codeforces 801A Vicious Keyboard

原题传送


先算出给出的字符串中含多少个"VK",接着用for循环每次改变字符串的一个字符,再算出改变后的字符串中含多少个"VK",最后取最大值


代码:

#include 
using namespace std;
int main() {
    char a[105];
    char b[105];
    int max = 0;
    scanf("%s", a);
    for(int i = 0; i + 1 < strlen(a); i++) {
        if(!strncmp(a + i, "VK", 2))
            max++;
    }
    int sum;
    for(int j = 0; j < strlen(a); j++) {
        sum = 0;
        strcpy(b, a);
        b[j] = (b[j] == 'V' ? 'K' : 'V');
        for(int i = 0; i < strlen(b) - 1; i++) {
            if(!strncmp(b + i, "VK", 2))
                sum++;
        }
        if(sum > max)
            max = sum;
    }
    printf("%d\n", max);
    return 0;
}



这题还可以这样做:

先算出给出的字符串中含多少个"VK",算的时候如果出现"VK"让对应位置的字符变为无意义字符,然后接着找"VV"或"KK",由于只能改变一个字符,所以找到一组"VV"或"KK"即可


代码:


#include 
using namespace std;
int main() {
    char a[105];
    int ans = 0;
    scanf("%s", a);
    for(int i = 0; i + 1 < strlen(a); i++) {
        if(!strncmp(a + i, "VK", 2)) {
            ans++;
            a[i] = a[i + 1] = '0'; // 赋予a[i]、a[i+1]一个无意义的值
            i++;
        }
    }
    for(int i = 0; i + 1 < strlen(a); i++) {
        if(!strncmp(a + i, "VV", 2) || !strncmp(a + i, "KK", 2)) {  //只需找一组就好
            ans++;
            break;
        }
    }
    printf("%d\n", ans);
    return 0;
}


你可能感兴趣的:(Codeforces)