小白月赛92
A 获得木头
void solve() {
int x;cin >> x;cout << 8 * x << '\n';
}
B 采矿时间到!
今天你挖了一条长度为 n,宽度为 1 的矿道,你最多只能在这条矿道向左/右正方向拓宽 2 格,并且你只能垂直于矿道挖掘。
##*#############**##
#########*##########
....................
#####*######**######
#*##################
如上图所示,'.'
表示矿道,'#'
表示的是圆石,'*'
表示的是矿石。
本题固定第三行为矿道,第一/二行为你的左侧,第四/五行为你的右侧。
因为你只能站在矿道上,至多向左/右正方向拓宽 22 格,所以本题只给出
每拓宽一格,需要花费 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 耕种时间到!
给定一个长度为
#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 探索的时光
求
#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';
}