我的贪心80分,求hack 证明我的贪心是错的
查看原帖
我的贪心80分,求hack 证明我的贪心是错的
524191
Man_CCNU楼主2022/12/14 16:06
#include<iostream>

using namespace std;

int n, res;
string s, p;

int main()
{
    cin >> s;
    for (int i = 0; i < s.size(); i++) {    //1.把连续一样的字符缩成一个字符
        char cur = s[i];
        if (i == 0) {
            p.push_back(cur);
        }
        else if (cur != p[p.size() - 1]) {
            p.push_back(cur);
        }
    }
    if (p.size() == 1) {
        res = 1;
        cout << res << endl;

        return 0;
    }
    s.clear();
    for (int i = 0; i < p.size(); i++) {  //2 s 代表当前刷成的样子 p代表模板 目标的字符串
        s.push_back(' ');
    }
    for (int i = 0; i < p.size(); i++) {  //3.从左到右依次去刷,从i开始往后刷,贪心刷到第id个字符,全部刷成p[i];
        if (p[i] == s[i]) continue;
        else {
            int cnt = 1, maxid = 1, id = i;
            for (int j = i + 1; j < p.size(); j++) {
                char pc = p[j];
                char sc = s[j];
                if (pc == sc && pc != p[i]) {
                    cnt--;
                }
                else if (pc != sc && pc == p[i]) {
                    cnt++;
                    if (cnt > maxid) {
                        maxid = cnt;
                        id = j;
                    }
                }
            }
            for (int k = i; k <= id; k++) {
                s[k] = p[i];
            }
            res++;
        }
    }
    cout << res << endl;

    return 0;
}
2022/12/14 16:06
加载中...