10.19模拟赛总结
\(\text{总结}\)
你说的对,但是今天 pty 说是信心场,但是我真的看不出哪里信心了。/jk
拿到了 \(\text{100 + 100 + 50 + 0 = 250pts}\) 的 \(\text{Rk.16}\)(怎么感觉在骂我),我真菜。/cf/cf/cf
我们的 @guanyf 巨佬真是太强了,拿到了 \(\text{Rk.1}\)(\(\text{305pts}\))。
\(\text{Edit}\)
\(\text{题意}\)
给一个字符串 \(S\),将 \(S\) 中的数字与字母用空格隔开后输出。
\(\text{分析}\)
模拟,没啥好讲的啊。。
\(\text{寄因}\)
没寄。
\(\text{代码}\)
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int l;
string s;
int main() {
getline(cin, s);
l = s.size();
if (l == 0) {
return 0;
}
cout << s[0];
for (int i = 1; i < l; i++) {
if (((s[i] >= '0' && s[i] <= '9') && ((s[i - 1] >= 'a' && s[i - 1] <= 'z') || (s[i - 1] >= 'A' && s[i - 1] <= 'Z'))) || (((s[i] >= 'a' && s[i] <= 'z') || (s[i] >= 'A' && s[i] <= 'Z')) && (s[i - 1] >= '0' && s[i - 1] <= '9'))) {
cout << ' ';
}
cout << s[i];
}
return 0;
}
\(\text{Game}\)
\(\text{题意}\)
有 \(n\) 个数 \(a_1, a_2, \ldots, a_n\),A 每次可以拿走任意个数(至少 \(1\) 个),B 每次可以拿走 \(1\) 个数,定义得分为 A 拿走的数的和,A 希望得分最大,B 希望得分最小,A 先手,假设两人都按最优策略,请问得分。
\(\text{分析}\)
因为 A 先手,且 A 想要得分最大,那么 A 一定会先把所有正数拿走,然后分两种情况讨论:
- A 拿完所有的正数后,B 拿走所有第奇数大的负数,A 拿走所有第偶数大的负数。
- A 拿完所有的正数后,再拿一个最大的负数,然后 B 拿走所有第偶数大的负数,A 拿走所有第奇数大的负数。
然后两种可能取个最大值就行了。
\(\text{寄因}\)
没寄。
\(\text{代码}\)
点击查看代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
constexpr int kMaxN = 1e5 + 5;
int n;
int a[kMaxN];
vector<int> l;
int sco0, sco1;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
if (a[i] >= 0) {
sco0 += a[i];
sco1 += a[i];
} else {
l.push_back(a[i]);
}
}
sort(l.begin(), l.end(), greater<int>());
for (int i = 0; i < l.size(); i += 2) {
sco0 += l[i];
}
if (n == 1) {
sco1 = -0x7fffffff;
} else {
for (int i = 1; i < l.size(); i += 2) {
sco1 += l[i];
}
}
cout << max(sco0, sco1) << '\n';
return 0;
}
\(\text{Score}\)
\(\text{题意}\)
给定 \(n\) 个元素的序列 \(a_1, \ldots, a_n\),求有多少个区间 \([l, r]\) 满足 \(\sum\limits_{i = l}^r a_i \equiv 0 \pmod{r - l + 1}\)。
\(\text{分析}\)
首先,注意到数据范围里微妙的 \(a_i \le 100\),然后用你聪明的小脑瓜想一想,就会发现,平均数的取值在 \([1, 100]\) 之间,然后题目中的式子可以变式为 \(\sum\limits_{i = l}^r (a_i - v) \ge 0\),前缀和维护一下就行了。
\(\text{寄因}\)
没寄。
\(\text{代码}\)
点击查看代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int kMaxN = 1e5 + 5, kMaxA = 105;
int n, a[kMaxN], s[kMaxN], v[kMaxN * kMaxA * 2];
ll r;
signed main() {
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= 100; i++) {
v[kMaxN * kMaxA] = 1;
for (int j = 1; j <= n; j++) {
s[j] = s[j - 1] + a[j] - i;
r += v[s[j] + kMaxN * kMaxA];
v[s[j] + kMaxN * kMaxA]++;
}
for (int j = 0; j <= n; j++) {
v[s[j] + kMaxN * kMaxA] = 0;
}
}
cout << r;
return 0;
}
\(\text{City}\)
本场比赛压轴题,需要动点脑抽筋。
\(\text{题意}\)
有 \(n\) 个点,可以建 \(m\) 条边,问能不能建 \(m\) 条边使得图中恰好有 \(X\) 个强连通分量,且对于每组 \(i(1 \le i \le q)\),满足 \(a_i, b_i\) 在同一个强连通分量中。
\(\text{分析}\)
咕咕咕。
\(\text{寄因}\)
不可以,总司令,但是抱零(
毒瘤数据人。
\(\text{代码}\)
咕咕咕。

浙公网安备 33010602011771号