网上做室内设计好的网站,婚纱摄影网站建设,编程免费网站,深圳seo网络推广营销Problem - B - Codeforces
找到最小操作次数#xff0c;使得子串对应位与原来字符串对应位不相同。
交换是没有代价的#xff0c;但是删除有代价。
首先复制两个一模一样的串#xff0c;我们把下面作为固定串#xff0c;然后对串中0和1的个数进行计数#xff0c;由于我…Problem - B - Codeforces
找到最小操作次数使得子串对应位与原来字符串对应位不相同。
交换是没有代价的但是删除有代价。
首先复制两个一模一样的串我们把下面作为固定串然后对串中0和1的个数进行计数由于我们最终的子串是向左对齐并依次与原串相反的所以我们不妨从固定串的右边删起。先看下图 也就是说我们只需要删到固定串的0小于等于原串1的个数且固定串的1的个数小于原串0的个数此时固定串的长度就是我们要找的长度再用原串长度减去固定串的长度即可。
下面是代码
using i64 long long;void solve() {std::string s;std::cin s;std::arrayint, 2 cnt{};for (auto x : s) {cnt[x - 0] 1;}int n s.size();int ans n;auto cur cnt;for (int i n - 1; i 0; i--) {if (cur[0] cnt[1] cur[1] cnt[0]) {ans n - 1 - i;break;}cur[s[i] - 0] - 1;}std::cout ans \n;
}int main() {std::ios::sync_with_stdio(false);std::cin.tie(nullptr);int t;std::cin t;while (t--) {solve();}return 0;
}