A. Entertainment in MAC

题意:给定字符串 \(S\),有两种操作,每次操作其中之一:

  • 把 \(S\) 变为 \(S\) 的翻转 \(T\)。
  • 把 \(S\) 变为 \(S + T\)。

问操作恰好 \(n\) 次能得到的最小字典序,\(n\) 为偶数。

候选字符串的前缀要么是 \(S\),要么是 \(T\),前缀相同而长度更长肯定不优,因此 \(ans = min(S, T + S)\)。

void solve() {
cin >> n >> s;
t = s;
ranges::reverse(t);
if(t < s) cout << (t + s) << '\n';
else cout << s << '\n';
}

B. Informatics in MAC

题意:给定数组 \(a\),划分为若干段(大于 \(1\) ),求一种划分方式,使得每段的 \(mex\) 相同,或者不存在。

\(mex\) 相同的两段合并后 \(mex\) 不变。

于是问题转化为:把数组分为两段,使得每段 \(mex\) 相同。

预处理前缀以及后缀 \(mex\),枚举划分位置。

void solve() {
int n; cin >> n; vector<int> a(n + 1); rep(i, 1, n) cin >> a[i]; vector<int> pre(n + 1, 0), suf(n + 1, 0);
set<int> se;
rep(i, 0, n) se.insert(i);
rep(i, 1, n) {
if(se.find(a[i]) != end(se)) {
se.erase(a[i]);
}
pre[i] = *begin(se);
}
rep(i, 0, n) se.insert(i);
per(i, n, 1) {
if(se.find(a[i]) != end(se)) {
se.erase(a[i]);
}
suf[i] = *begin(se);
}
rep(i, 2, n) {
if(pre[i - 1] == suf[i]) {
cout << 2 << '\n';
cout << 1 << ' ' << i - 1 << '\n';
cout << i << ' ' << n << '\n';
return;
}
}
cout << -1 << '\n';
}

C. Messenger in MAC

题意:给定 \(n\) 对 \((a, b)\),选出 \(k\) 对数据并任意排列。

一个长度为 \(k\) 的排列的代价如下定义:

\[\sum_{i=1}^{k} a_{p_i} + \sum_{i=1}^{k - 1} |b_{p_i} - b_{p_{i+1}}|
\]

\(p\) 为各元素在排列中的位置。

在代价不大于 \(m\) 的情况下,最大化 \(k\)。

如果我们已经确定了所选元素,如何最小化代价。

$ \sum a$ 不会随顺序变化。

对于 \(b\),可以当做遍历数轴上的 \(k\) 个点所走的路程。

可以直观的看到,对 \(b\) 排序后最优。

因此,所有数先按 \(b\) 排序。

令 \(f[i][j]\) 表示选 \(i\) 个元素,最后一个元素是 \(j\) 的最小代价。

\[f[i][j] = f[i - 1][k] + a[j] + (b[j] - b[k]) \ \ \ \ \ \ \ \ k < j
\]

直接转移是 \(O(n^3)\) 的,考虑前缀 \(min\) 优化。

\[g[i][j] = min(f[i][k] - b[k]) \ \ \ \ \ \ \ \ 1 \le k \le j
\]

所以

\[f[i][j] = g[i - 1][j - 1] + a[j] + b[j]
\]
struct Node {
int a, b;
bool operator < (const Node &o) const {
return b < o.b;
}
}; void solve() {
int n, m; cin >> n >> m;
vector<Node> t(n + 1);
rep(i, 1, n) {
cin >> t[i].a >> t[i].b;
}
sort(All(t)); vector<vector<ll>> f(n + 1, vector<ll>(n + 1, 1e18));
int ans = 0; rep(i, 1, n) {
if(t[i].a <= m) {
ans = 1;
}
f[1][i] = min(f[1][i - 1], (ll)t[i].a - t[i].b);
} rep(i, 2, n) {
rep(j, i, n) {
f[i][j] = f[i - 1][j - 1] + t[j].a + t[j].b;
}
rep(j, i, n) {
if(f[i][j] <= m) {
ans = i;
}
f[i][j] = min(f[i][j - 1], f[i][j] - t[j].b);
}
}
cout << ans << '\n'; }

D. Exam in MAC

题意:给定一个大小为 \(n\) 的不可重集 \(s\) 和整数 \(c\),统计满足以下所有条件的 \((x, y)\) 对数。

  • \(0 \leq x \leq y \leq c\)
  • \(x + y\) 不在集合内。
  • \(y - x\) 不在集合内。

简单的容斥。

\(Ans = U - \{x + y \in s\} - \{y - x \in s\} + \{x + y \in s\} \cap \{y - x \in s\}\)

最后一部分的交集的充要条件为两元素奇偶性相同,直接统计即可。

void solve() {
ll n, c; cin >> n >> c;
ll ans = (c + 2) * (c + 1) / 2;
int cnt[2] = {0, 0};
rep(i, 1, n) {
int x; cin >> x;
ans -= (x / 2 + 1);
ans -= (c - x + 1);
ans += ++ cnt[x & 1];
}
cout << ans << '\n';
}

Codeforces Round 932 (Div. 2) ABCD的更多相关文章

  1. Codeforces Round #258 (Div. 2)[ABCD]

    Codeforces Round #258 (Div. 2)[ABCD] ACM 题目地址:Codeforces Round #258 (Div. 2) A - Game With Sticks 题意 ...

  2. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  3. Codeforces Round #268 (Div. 2) ABCD

    CF469 Codeforces Round #268 (Div. 2) http://codeforces.com/contest/469 开学了,时间少,水题就不写题解了,不水的题也不写这么详细了 ...

  4. Codeforces Round #449 (Div. 2)ABCD

    又掉分了0 0. A. Scarborough Fair time limit per test 2 seconds memory limit per test 256 megabytes input ...

  5. Codeforces Round #143 (Div. 2) (ABCD 思维场)

    题目连链接:http://codeforces.com/contest/231 A. Team time limit per test:2 seconds memory limit per test: ...

  6. Codeforces Round #248 (Div. 2) (ABCD解决问题的方法)

    比赛链接:http://codeforces.com/contest/433 A. Kitahara Haruki's Gift time limit per test:1 second memory ...

  7. Codeforces Round #427 (Div. 2)——ABCD

    http://codeforces.com/contest/835 A.拼英语水平和手速的签到题 #include <bits/stdc++.h> using namespace std; ...

  8. Codeforces Round #412 (Div. 2)ABCD

    tourist的剧毒contest,题干长到让人不想做... A.看不太懂题意直接看下面input output note n组里有两数不一样的一组就rated 否则单调不增为maybe,否则unra ...

  9. Codeforces Round #315 (Div. 2) (ABCD题解)

    比赛链接:http://codeforces.com/contest/569 A. Music time limit per test:2 seconds memory limit per test: ...

  10. Codeforces Round #352 (Div. 2) ABCD

    Problems     # Name     A Summer Camp standard input/output 1 s, 256 MB    x3197 B Different is Good ...

随机推荐

  1. 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第2章

    本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 出处:2.2.6 Windows内存布局 原文: segment heap:用于Universal Windows Platform程序,它提供了 ...

  2. elementui树形表格分页

    效果图 如果你刚好需求中需要如上效果那么只需要吧代码复制过去直接用即可,注意写在nextTick中 前提是vue加elementui 代码如下 /**    *  树形表格分页    * @param ...

  3. Linux服务器下启动和关闭node

    首先将node工程的代码和node_modules目录上传到服务器的某一个目录下 1.用forever 进行管理 前提:linux下已经安装了node npm install -g forever / ...

  4. 字符串 Hash 的一些应用

    字符串 Hash 可以快速的解决一类需要字符串匹配的问题.同时还可以以较小的思维量和代码量通过一些难题. P3809 [模板]后缀排序,这题的正解显然是 $\mathcal{O}(n\log n)$ ...

  5. 学习Source Generators之输出生成的文件

    上一篇文章学习了通过获取和解析swagger.json的内容,来生成API的请求响应类. 但是其中无法移动与编辑. 那么本文将介绍如何输出生成的文件. EmitCompilerGeneratedFil ...

  6. 2 CSS基本选择器

    2 基本选择器 id选择器 id选择器使用"#"进行标识,后面紧跟id名,其基本语法格式为: #id名{属性1:属性值1;属性2:属性值2;属性3:属性值3;} 该语法中,id名即 ...

  7. #构造#洛谷 6470 [COCI2008-2009#6]CUSKIJA

    题目 给定一个长度为 \(n\) 的序列 \(a\),请将其重新排序, 新序列中任意相邻两个数之和都不能被 \(3\) 整除. 分析 分类讨论,如果只有3的倍数多于1个无解 没有 \(3k+1\) 或 ...

  8. OpenHarmony 社区运营报告(2023 年 10 月)

      ● 截至2023年10月,OpenHarmony社区共有51家共建单位,累计超过6200名贡献者产生24.2万多个PR,2.3万多个Star,6.1万多个Fork,59个SIG. ● OpenHa ...

  9. mysql 必知必会整理—sql 排序与过滤[三]

    前言 简单整理一下MySQL的排序与过滤. 正文 我们查询出来的结果有时候是希望进行排序的,比如说: select product_name from products order by prod_n ...

  10. seaJS简介

    所有版本的 zip 包请在这里下载:seajs/tags 解压后,目录说明如下: dist -- sea.js 等压缩好的文件,直接可用 docs -- 使用文档 lib -- 给 Node.js 用 ...