1 solutions
-
0
Guest MOD
-
2
可以先预处理出每个前后缀的可爱值,然后枚举分界点暴力计算即可。 注意会爆,需要开 (最后一个样例);还需要注意可能会出现负 数。时间复杂度
#include <bits/stdc++.h> using namespace std; #define int long long void solve() { int n; string s; cin >> n >> s; vector<int> pre(n + 1, 0); // 前缀1的数量 for (int i = 1; i <= n; ++i) { pre[i] = pre[i - 1] + (s[i - 1] == '1'); } int max_product = -1e18; for (int k = 1; k < n; ++k) { // 左半部分可爱值:1的数量 - 0的数量 = pre[k] - (k - pre[k]) = 2*pre[k] - k // 右半部分可爱值:(pre[n]-pre[k]) - (n-k - (pre[n]-pre[k])) = 2*(pre[n]-pre[k]) - (n-k) int left = 2 * pre[k] - k; int right = 2 * (pre[n] - pre[k]) - (n - k); max_product = max(max_product, left * right); } cout << max_product << endl; } signed main() { solve(); return 0; }
- 1
Information
- ID
- 1465
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- (None)
- # Submissions
- 71
- Accepted
- 13
- Uploaded By