小白月赛92

A 获得木头

void solve() {
    int x;cin >> x;cout << 8 * x << '\n';
}

B 采矿时间到!

今天你挖了一条长度为 n,宽度为 1 的矿道,你最多只能在这条矿道向左/右正方向拓宽 2 格,并且你只能垂直于矿道挖掘。

##*#############**##
#########*##########
....................
#####*######**######
#*##################

如上图所示,'.' 表示矿道,'#' 表示的是圆石,'*' 表示的是矿石。
本题固定第三行为矿道,第一/二行为你的左侧,第四/五行为你的右侧。

因为你只能站在矿道上,至多向左/右正方向拓宽 22 格,所以本题只给出 5×n 的俯视图。
每拓宽一格,需要花费 1 点体力。现在您有ℎ点体力,问你最多能得到多少矿石?

string s[6];
void solve() {
    int n, h;cin >> n >> h;
    for (int i = 1;i <= 5;i++) cin >> s[i];
    int t1 = 0, t2 = 0, t3 = 0;
    for (int i = 0;i < n;i++) {
        if (s[1][i] == '*' && s[2][i] == '*')t1++;
        if (s[1][i] != '*' && s[2][i] == '*')t2++;
        if (s[1][i] == '*' && s[2][i] != '*')t3++;
        if (s[5][i] == '*' && s[4][i] == '*')t1++;
        if (s[5][i] != '*' && s[4][i] == '*')t2++;
        if (s[5][i] == '*' && s[4][i] != '*')t3++;
    }
    int t = 2 * t1 + t2;
    if (h <= t) {
        cout << h << '\n';
    } else {
        cout << t + min(t3, (h - t) / 2);
    }
}

C 耕种时间到!

给定一个长度为 n 的数组 a,每次将所有的数字进行 x3 的操作,求在所有操作中哪一个操作 ai=x 的数量最多。

#define int long long
void solve() {
    int n;cin >> n;vector<int> a(n + 1);
    for (int i = 1;i <= n;i++) cin >> a[i];
    int x;cin >> x;
    int ans = 0;
    for (int i = 0;i <= 30;i++) {
        int res = 0;
        for (int j = 1;j <= n;j++) {
            if (a[j] == x) {
                res += (1ll << i);
            }
            a[j] = (a[j] + 2) / 3;
        }
        ans = max(ans, res);
    }
    cout << ans << '\n';
}

D 探索的时光

minx=1ni=1n(xi)2×ai

#define int long long
void solve() {
    int n;cin >> n;
    int sum1 = 0, sum2 = 0, sum3 = 0;
    for (int i = 1;i <= n;i++) {
        int x;cin >> x;sum1 += x;sum2 += x * i;sum3 += x * i * i;
    }
    int ans = 1e18;
    for (int x = 1;x <= n;x++) {
        int res = x * x * sum1 - 2 * x * sum2 + sum3;
        ans = min(ans, res);
    }
    cout << ans << '\n';
}

E 来硬的