本文主要是介绍贪心+构造,CF 1592F1 - Alice and Recoloring 1,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、题目
1、题目描述
2、输入输出
2.1输入
2.2输出
3、原题链接
二、解题报告
1、思路分析
2、复杂度
3、代码详解
一、题目
1、题目描述
2、输入输出
2.1输入
2.2输出
3、原题链接
1592F1 - Alice and Recoloring 1
二、解题报告
1、思路分析
操作2、3可以被更低廉的操作1替代
一次操作4可以替代四次操作1,且更低廉
两次操作4 = 1次操作4 + 6次操作1,价格相同
也就是说, > 1 次的操作4我们都可以换成1次操作4加若干次操作1
那么我们全用操作1,然后看能不能替换掉4个操作1为1个操作4
只能替换一次,多了不会更便宜
2、复杂度
时间复杂度: O(NM)空间复杂度:O(NM)
3、代码详解
#include <bits/stdc++.h>
#include <ranges>using i64 = long long;
using i32 = unsigned int;
using u64 = unsigned long long;
using i128 = __int128;constexpr int inf32 = 1E9 + 7;
constexpr i64 inf64 = 1E18 + 7;
constexpr int P = 1'000'000'007;void solve() {int n, m;std::cin >> n >> m;std::vector<std::string> g(n);for (int i = 0; i < n; ++ i)std::cin >> g[i];std::vector<std::vector<int>> acc(n + 1, std::vector<int>(m + 1));int res = 0;for (int i = n - 1; ~i; -- i)for (int j = m - 1; ~j; -- j) {acc[i][j] = acc[i + 1][j] ^ acc[i][j + 1] ^ acc[i + 1][j + 1];if (acc[i][j] == (g[i][j] & 1)) {g[i][j] = '#'; // 标记 操作1acc[i][j] ^= 1;++ res;}}if (g[n - 1][m - 1] == '#') {for (int i = 0; i < n - 1; ++ i)for (int j = 0; j < m - 1; ++ j) {if (g[i][j] == '#' && g[i][m - 1] == '#' && g[n - 1][j] == '#') {-- res;std::cout << res;return;}}}std::cout << res;
}auto FIO = []{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout.tie(nullptr);return 0;
}();int main () {#ifdef DEBUGfreopen("in.txt", "r", stdin);freopen("out.txt", "w", stdout);#endifint T = 1;// std::cin >> T;while (T --)solve();return 0;
}
这篇关于贪心+构造,CF 1592F1 - Alice and Recoloring 1的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!