字符串含 ^(支點)、數字(重量)、=(空)。計算支點左側力矩和與右側力矩和,比較大小輸出 left/right/balance。
單次遍歷 O(n),long long 防溢出。
n 人,m 條債務關係 a 欠 b c 元。每人淨流入 = 總被欠 - 總欠出。最優結算:所有淨流入為正的人收到錢,總和即為最少總交易額。
O(n+m),貪心證明:抵消後只需正流入者收錢。
同 CF 375A,構造法:取出 1,6,8,9 各一個,剩餘降序做前綴,1689 排列補餘數,0 置末尾。
n 行 m 列 0/1 矩陣,**行可重新排序,列順序固定**。求全 1 子矩陣最大面積。
核心思路:
dp[i][j] = 第 i 行第 j 列向左連續 1 的個數cnt[j][len] = 有多少行的 dp[i][j] ≥ lenlen * cnt[j][len],取最大值
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= m; ++j) {
if (a[i][j] == '1') dp[i][j] = dp[i][j-1] + 1;
else dp[i][j] = 0;
cnt[j][dp[i][j]]++;
}
}
for (int j = 1; j <= m; ++j)
for (int len = m; len >= 1; --len)
cnt[j][len] += cnt[j][len+1]; // 後綴和:≥len 的行數
int ans = 0;
for (int i = 1; i <= n; ++i)
for (int j = 1; j <= m; ++j)
ans = max(ans, dp[i][j] * cnt[j][dp[i][j]]);