牛哥的赞美文:用AI生成文章并进行修改

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

壕哥很担心自己写不好惹得牛哥龙怒,该怎么办呢?壕哥想到了最近在牛国网络大火的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串数量。

生成一段c++代码

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

int main() {
    string s;
    cin >> s;
    int n = s.size();
    int ans = 0;

    // 计算所有可能的修改方式
    for (int i = 0; i < n; i++) {
        for (int j = i + 1; j < n; j++) {
            // 对于每种修改方式,生成所有可能的字符串
            for (int k = 0; k < 2; k++) {
                for (int l = 0; l < 2; l++) {
                    string t = s;
                    // 修改第 i 位
                    if (k == 0) {
                        t[i] = (t[i] == '0' ? '1' : '0');
                    } else {
                        t.erase(i, 1);
                        t.insert(i, 1, (t[i] == '0' ? '1' : '0'));
                    }
                    // 修改第 j 位
                    if (l == 0) {
                        t[j] = (t[j] == '0' ? '1' : '0');
                    } else {
                        t.erase(j, 1);
                        t.insert(j, 1, (t[j] == '0' ? '1' : '0'));
                    }
                    // 检查是否已经存在
                    bool exist = false;
                    for (int m = 0; m < ans; m++) {
                        if (t == s) {
                            exist = true;
                            break;
                        }
                    }
                    if (!exist) {
                        ans++;
                    }
                }
            }
        }
    }
    cout << ans << endl;
    return 0;
}

测试s为110011时输出是多少

输入样例: 110011

输出样例: 19

【样例解释】

原始串为110011,共有6位,修改后的串也必须是6位。根据题意,我们可以进行两次修改,所以总共有C(6,2)种修改方式。对于每种修改方式,我们可以生成一个新的01串,然后计算不同的数量即可。

举个例子,假设我们选中了第1位和第4位进行修改,则可能生成以下19种不同的01串(其中下划线处为修改的位置):

  1. _10001
  2. _10010
  3. _10101
  4. _11001
  5. _11010
  6. _11101
  7. 0_0001
  8. 0_0010
  9. 0_0101
  10. 0_1001
  11. 0_1010
  12. 0_1101
  13. 1_0001
  14. 1_0010
  15. 1_0101
  16. 1_1001
  17. 1_1010
  18. 1_1101
  19. 11001_

可以看到,其中第1个和第19个串是相同的,因此本质不同的串数量为18。

牛哥的赞美文:用AI生成文章并进行修改

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

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