牛哥的赞美诗:AI与修改的艺术
牛哥的赞美诗:AI与修改的艺术
这天,牛国神君牛哥要求他的臣子壕哥写一篇赞美自己功绩的文章。
壕哥很担心自己写不好惹得牛哥龙怒,该怎么办呢?壕哥想到了最近在牛国网络大火的AICharGPT,他决定先用AI生成一篇文章,然后进行少量修改。
AI将会生成一篇文章(用01串来表示),随后,壕哥将对这篇文章进行修改,他所能做的修改如下:
- 选择一个01串中的位置,将该位置的0或1取反
- 选择一个01串中的位置,将该位置的0或1删除
- 选择一个01串中的空位,在该空位上插入一个0或者1
为了不将文章改乱,壕哥决定刚好进行两次修改, 并且修改后的文章和原文章的长度要相等。
注意,壕哥是个完美主义者,如果被你统计的文章中存在能够被壕哥以1次修改甚至更低的次数获得的文章,那么他将非常不高兴,所以请不要做删除数字再加回去这种事哦。
现在壕哥想知道,他所能做的修改能够生成多少篇本质不同的文章(本质不同文章指修改后的两个01串不相等),这个问题太难了,壕哥决定向你求助。
输入描述: 输入包括一行,包括一个01串 s (2≤s.size()≤1000)。
输出描述: 输出包括一行,包括一个整数 k,表示的是壕哥根据 s 以及修改规则能够产生的本质不同01串数量。
生成c++代码
测试s为110011时输出是多少
**思路:**枚举两次修改的位置,然后分别进行修改,再统计不同的字符串数目即可。注意,对于“删除数字再加回去”的情况,我们可以将删除操作当成插入操作,这样就避免了这种情况的出现。
AC代码:
#include <iostream>
#include <string>
#include <set>
using namespace std;
int main() {
string s;
cin >> s;
set<string> res;
for (int i = 0; i < s.size(); i++) {
for (int j = 0; j < s.size(); j++) {
if (i == j) continue;
string t1 = s;
string t2 = s;
// 第一次修改
if (i < s.size()) {
if (t1[i] == '0') t1[i] = '1';
else t1[i] = '0';
}
if (j < s.size()) {
if (t2[j] == '0') t2[j] = '1';
else t2[j] = '0';
}
// 第二次修改
if (i < s.size()) {
if (t1[i] == '0') t1[i] = '1';
else t1[i] = '0';
}
if (j < s.size()) {
if (t2[j] == '0') t2[j] = '1';
else t2[j] = '0';
}
if (i >= s.size()) t1.insert(i, '0');
if (j >= s.size()) t2.insert(j, '0');
res.insert(t1);
res.insert(t2);
}
}
cout << res.size() << endl;
return 0;
}
原文地址: https://www.cveoy.top/t/topic/mCCC 著作权归作者所有。请勿转载和采集!