跳转至

ABC323C World Tour Finals 题解

由于题目保证一定有解,所以对于每个人,贪心地做得分多的题目就好了。

注意已经是最大得分时要输出 \(0\)

constexpr int N = 200;
int n, m;
int a[N], r[N], ans, mx;
str s[N];
void solve() {
    std::cin >> n >> m;
    rep(i, m) std::cin >> a[i];
    rep(i, n) {
        std::cin >> s[i];
        s[i] = '#' + s[i];
        rep(j, m) {
            if (s[i][j] == 'o')
                r[i] += a[j];
        }
        r[i] += i;
    }
    mx = *std::max_element(r + 1, r + 1 + n);
    rep(i, n) {
        if(r[i] == mx) {
            std::cout << 0 << '\n';
            continue;
        }
        ans = 0;
        vec<int> wt;
        rep(j, m) if (s[i][j] == 'x')
            wt.pb(a[j]);
        std::sort(wt.begin(), wt.end(), std::greater<int>());
        for (auto &j : wt) {
            ++ans;
            if ((r[i] += j) > mx) break;
        }
        std::cout << ans << '\n';
    }
}

评论