Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2)

Contest 2050 and Codeforces Round #718 (Div. 1 + Div. 2)

也就会写写模拟了

A - Sum of 2050

数位和

int main() {
    IOS;
    for (cin >> _; _; --_) {
        ll n, x; cin >> n;
        if (n % 2050) { cout << "-1
"; continue; }
        x = n / 2050; n = 0;
        while (x) n += x % 10, x /= 10;
        cout << n << '
';
    }
    return 0;
}

B - Morning Jogging

int s[105][105], a[105][105], b[105], d[105];
 
int main() {
    IOS;
    for (cin >> _; _; --_) {
        cin >> n >> m;
        rep (i, 1, n) rep(j, 1, m) cin >> a[i][j];
        rep (i, 1, n) sort(a[i] + 1, a[i] + 1 + m), b[i] = 1, d[i] = m;
        rep (j, 1, m) {
            int mi = 2e9, w = 0;
            rep (i, 1, n) if (umin(mi, a[i][b[i]])) w = i;
            rep (i, 1, n) if (i ^ w) s[j][i] = a[i][d[i]--];
            s[j][w] = a[w][b[w]++];
        }
        rep (i, 1, n) rep (j, 1, m) cout << s[j][i] << char(" 
"[j == m]);
    }
    return 0;
}

C - Fillomino 2

贪心, 要相连, 最后先平着, 平不了, 再向下

在相连的时候优先先上左走, 其次是下右

int a[505][505];
 
void dfs(int x, int y, int k, int &c) {
    if (c == 0) return;
    if (x - 1 && !a[x - 1][y]) a[x - 1][y] = k, dfs(x - 1, y, k, --c);
    if (c && y - 1 && !a[x][y - 1]) a[x][y - 1] = k, dfs(x, y - 1, k, --c);
    if (c && x + 1 <= n && !a[x + 1][y]) a[x + 1][y] = k, dfs(x + 1, y, k, --c);
    if (c && y + 1 < x && !a[x][y + 1]) a[x][y + 1] = k, dfs(x, y + 1, k, --c);
}
 
int main() {
    IOS; cin >> n;
    rep (i, 1, n) {
        cin >> a[i][i]; int c = a[i][i] - 1;
        if (c && i - 1 && !a[i][i - 1]) a[i][i - 1] = a[i][i], dfs(i, i - 1, a[i][i], --c);
        else if (c && i + 1 <= n) a[i + 1][i] = a[i][i], dfs(i + 1, i, a[i][i], --c);
        if (c) return cout << -1, 0;
    }
    rep (i, 1, n) rep(j, 1, i) cout << a[i][j] << char(" 
"[j == i]);
    return 0;
}

D - Explorer Space

int d[N][N][11], a[N][N], b[N][N];

int main() {
    IOS; cin >> n >> m >> k; 
    if (k & 1) { 
        rep (i, 1, n) rep (j, 1, m) cout << -1 << char(" 
"[j == m]);
        return 0;
    } k >>= 1;
    memset(d, 0x3f, sizeof d);
    rep (i, 1, n) rep (j, 1, m - 1) {
        cin >> a[i][j]; a[i][j] <<= 1;
        umin(d[i][j][1], a[i][j]); umin(d[i][j + 1][1], a[i][j]);
    }
    rep (i, 1, n - 1) rep (j, 1, m) {
        cin >> b[i][j]; b[i][j] <<= 1;
        umin(d[i][j][1], b[i][j]); umin(d[i + 1][j][1], b[i][j]);
    }
    rep (t, 2, k) rep (i, 1, n) rep (j, 1, m) {
        if (i - 1) umin(d[i][j][t], d[i - 1][j][t - 1] + b[i - 1][j]);
        if (j - 1) umin(d[i][j][t], d[i][j - 1][t - 1] + a[i][j - 1]);
        if (i < n) umin(d[i][j][t], d[i + 1][j][t - 1] + b[i][j]);
        if (j < m) umin(d[i][j][t], d[i][j + 1][t - 1] + a[i][j]);
        umin(d[i][j][t], d[i][j][t - 1] + d[i][j][1]);
    }
    rep (i, 1, n) rep (j, 1, m) cout << d[i][j][k] << char(" 
"[j == m]);
    return 0;
}
原文地址:https://www.cnblogs.com/2aptx4869/p/14696380.html