P10168题解
szh_AK_all · · 题解
题意
我们需要进行若干次操作,使得字符串
分析
由于
首先,我们将问题简化:我们可以让字符串
相信大家都明白这个道理吧:在周长相等的正方形与长方形中,正方形面积总比长方形大。为什么?因为正方形的边长相等,也就是差值为
转换为数学逻辑就是:
举个例子:若
清楚这个问题后,再来考虑题目。我们要尽可能让
枚举
Code
#include <bits/stdc++.h>
using namespace std;
int ans, a[200005];
int main() {
string s;
cin >> s;
int n = s.size();
for (int i = n - 1; i >= n / 2; i--) {
if (s[i] == '0') {
a[++ans] = i;
s[i] = '1';
if (s[i - 1] == '0')
s[i - 1] = '1';
else
s[i - 1] = '0';
}
}
for (int i = 0; i < n / 2; i++) {
if (s[i] == '1') {
a[++ans] = i + 1;
s[i] = '0';
if (s[i + 1] == '0')
s[i + 1] = '1';
else
s[i + 1] = '0';
}
}
long long o = 0;
for (int i = 0; i < n; i++)
if (s[i] == '1')
o++;
long long tmp = 0;
for (int i = 0; i < n; i++) {
if (s[i] == '0')
tmp += o;
else
o--;
}
cout << tmp << endl << ans << endl;
for (int i = 1; i <= ans; i++)
cout << a[i] << " ";
}
打字不易,请管理大大通过吧!也请各位点个赞!
另外附上赛事记录