1. 程式人生 > 實用技巧 >暑期訓練2 Gym - 102623H Hay Mower 思維

暑期訓練2 Gym - 102623H Hay Mower 思維

給一個n * m 的草地,初始時刻沒有草,每單位時刻每塊會長草。

在t時刻,將在第 x 行或者第 y 列鋤草。

問最終共鋤了多少草。

暴力方法:

標記pre[maxn][maxn],表示這個點上次的鋤草時間,每次鋤草都遍歷當前行/列,並且標記pre。線上更新res

複雜度k*n

優化方法:

標記l[maxn],r[maxn].表示該行最後的最後的鋤草時間,最後根據最後時間統計貢獻即可。正確性是顯然的,一旦一塊地被鋤草,到這時刻為止所有草都會被鋤。

ll a[505][505];
ll prec[505];
ll prer[505];



int main() {
    ll res = 0;
    
int n, m, k; n = readint(); m = readint(); k = readint(); char op[5]; for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) a[i][j] = readll(), a[i][j] %= MOD; for (int i = 0; i < k; i++) { scanf("%s", op); ll x = readll(); ll y = readll();
if (op[0] == 'r') prer[x] = max(y, prer[x]); else prec[x] = max(y, prec[x]); } for (int i = 1; i <= n; i++) for (int j = 1; j <= m; j++) res += a[i][j] * (max(prer[i], prec[j]) % MOD), res %= MOD; Put(res); }