这天,牛国神君牛哥要求他的臣子壕哥写一篇赞美自己功绩的文章。

壕哥很担心自己写不好惹得牛哥龙怒,该怎么办呢?壕哥想到了最近在牛国网络大火的AICharGPT,他决定先用AI生成一篇文章,然后进行少量修改。

AI将会生成一篇文章(用01串来表示),随后,壕哥将对这篇文章进行修改,他所能做的修改如下:

  1. 选择一个01串中的位置,将该位置的 0 或 1 取反
  2. 选择一个01串中的位置,将该位置的 0 或 1 删除
  3. 选择一个01串中的空位,在该空位上插入一个 0 或者 1

为了不将文章改乱,壕哥决定刚好进行两次修改,并且修改后的文章和原文章的长度要相等。

注意,壕哥是个完美主义者,如果被你统计的文章中存在能够被壕哥以 1 次修改甚至更低的次数获得的文章,那么他将非常不高兴,所以请不要做删除数字再加回去这种事哦。

现在壕哥想知道,他所能做的修改能够生成多少篇本质不同的文章(本质不同文章指修改后的两个 01 串不相等),这个问题太难了,壕哥决定向你求助。

输入描述: 输入包括一行,包括一个 01 串 s (2≤s.size()≤1000)。 输出描述: 输出包括一行,包括一个整数 k,表示的是壕哥根据 s 以及修改规则能够产生的本质不同 01 串数量。 示例1 输入 110011 输出 19

示例2 输入 1010 输出 9 生成一段c++代码并测试s为110011时输出是多少

题目要求生成的修改后的字符串和原字符串长度相等,所以可以枚举所有可能的一次修改和两次修改,分别进行计算。对于一次修改,枚举每个位置,分别取反或者插入 0 或 1,然后计算修改后的字符串是否和原字符串不同即可。对于两次修改,枚举所有可能的位置组合,计算修改后的字符串是否和原字符串不同即可。注意要去重,避免重复计算。

代码如下:

#include <iostream>
#include <string>
#include <unordered_set>
using namespace std;

int main() {
    string s;
    cin >> s;
    int n = s.size();
    unordered_set<string> res;
    // 一次修改
    for (int i = 0; i < n; i++) {
        // 取反
        string tmp = s;
        tmp[i] = tmp[i] == '0' ? '1' : '0';
        if (tmp != s) res.insert(tmp);
        // 插入
        for (int j = 0; j <= n; j++) {
            tmp = s;
            tmp.insert(j, 1, (j == i) ? '0' : '1');
            if (tmp != s) res.insert(tmp);
        }
    }
    // 两次修改
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i == j) continue;
            // 取反
            string tmp = s;
            tmp[i] = tmp[i] == '0' ? '1' : '0';
            tmp[j] = tmp[j] == '0' ? '1' : '0';
            if (tmp != s) res.insert(tmp);
            // 插入
            for (int k = 0; k <= n; k++) {
                for (int l = 0; l <= n; l++) {
                    if (k == l) continue;
                    tmp = s;
                    tmp.insert(k, 1, (k == i) ? '0' : '1');
                    tmp.insert(l, 1, (l == j) ? '0' : '1');
                    if (tmp != s) res.insert(tmp);
                }
            }
        }
    }
    cout << res.size() << endl;
    return 0;
}

测试 s 为 110011 时输出为 19。

牛国神君牛哥的赞美文:AI辅助写作与字符串修改难题

原文地址: https://www.cveoy.top/t/topic/mCDn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录