题目链接:Codeforces Round 968 (Div. 2) - Codeforces

总结:C题想到了,但是写成shi了,出得有点慢。

A. Turtle and Good String

tag:签到

Solution:直接判断第一个字符是否与最后一个字符相等即可。

void solve(){
cin >> n;
string s;
cin >> s;
if (s[0] == s[n - 1]){
cout << "No\n";
}
else{
cout << "YES\n";
}
}

B. Turtle and Piggy Are Playing a Game 2

tag:博弈论

Solution:显然每次操作要么是删除最小值,要么是删除最大值。排序后输出中间值即可。

void solve(){
cin >> n;
vector<int> a(n);
for (int i = 0; i < n; i ++){
cin >> a[i];
}
sort(a.begin(), a.end());
cout << a[n / 2] << endl;
}

C. Turtle and Good Pairs

tag:思维

Description:给定一个字符串\(s\),对于一对整数\((i, j)\),当\(si == sj\)或者存在一个整数\(k\),使得\(s_k != s_{k + 1}\),且\(s_k != s_i || s_{k + 1} != s_j\),\((i, j)\)为一对好的配对。将字符串重排,使好的配对数最大。

Solution:我们令\(k == i\),那么只要\(s_{i + 1} != s_{i} 且 s_{i + 1} != s_{j}\)即可,那么显然我们需要尽可能多的相邻两个字符不同的组合即尽可能使相邻两个字符不同。

  • 其实只需要按顺序排列字符即可,多的字符全放在后面。

Competing:没仔细想,认为尽可能使相邻字符不同,因此需要判断出现次数最多的字符。

void solve(){
cin >> n;
cin >> s;
int ma = 0; // 出现次数最多的字符
char c;
map<char, int> mp;
vector<int> a(26);
for (int i = 0; i < n; i ++){
mp[s[i]] ++;
if (mp[s[i]] > ma){
ma = mp[s[i]];
c = s[i];
}
a[s[i] - 'a'] ++;
}
if (ma < n - ma + 1){
string ans = "";
int c = 0;
while (c < n){
for (int i = 0; i < 26; i ++){
if (a[i]){
a[i] --;
ans += char(i + 'a');
c ++;
}
}
}
cout << ans << endl;
}
else{
string ans = "";
int cnt = 0;
a[c - 'a'] = 0;
bool flag = true;
while (cnt < n && flag){
flag = false;
for (int i = 0; i < 26; i ++){
if (a[i]){
a[i] --;
ans += c;
ma --;
ans += char(i + 'a');
cnt ++;
flag = true;
}
}
}
while (ma){
ans += c;
ma --;
}
cout << ans << endl;
}
}

D1. Turtle and a MEX Problem (Easy Version)

tag:思维

Description:给定\(n\)个序列,以开始有一个非负整数\(x\):

  • 每次操作可以任选一个序列,令\(x = mex(x, a_1, a_2, ..., a_n)\)。即\(f(x)\)为初始值为\(x\),操作之后可以得到的最大值。
  • 给定一个\(m\),求\(\sum_{0}^{m}f(m)\)。

Solution:对于每个序列,我们最多操作两次,可以得到每个序列的第二个\(mex2\)。那么当\(x\)小于最大的\(mex2\)时,将其变成\(mex2\),否则使用\(x\)本身。

void solve(){
cin >> n >> m;
vector<pii> a(n);
int ma = 0;
for (int i = 0; i < n; i ++){
int len;
cin >> len;
vector<int> t(len + 10);
for (int j = 0; j < len; j ++){
int x;
cin >> x;
if (x < len + 10)
t[x] = 1;
}
int c = 1;
for (int j = 0; j <= len + 5 && c <= 2; j ++){
if (!t[j] && c == 1){
a[i].fi = j;
c ++;
}
else if (!t[j]){
c ++;
a[i].se = j;
ma = max(ma, j);
break;
}
}
}
int ans = 0;
if (m <= ma){
ans += (m + 1) * ma;
}
else{
ans += (ma + 1) * ma;
ans += (ma + 1 + m) * (m - ma) / 2;
}
cout << ans << endl; }

D2. Turtle and a MEX Problem (Hard Version)

tag:思维

Solution:和D1的唯一区别时,在一次操作中每个序列最多使用一次。

  • 对于第\(i\)个序列,我们建一条有向边\(u_i -> v_i\)。那么一次操作\(x\)可以沿着一条出边移动,或者移动到一个任意点\(u\),并断开它的出边。
  • 我们先倒序处理一下,令\(b_i\)等于\(i\)能够到达的最大值,我们先倒序处理一下。
  • 首先一个\(x\)的答案至少是\(f_x\),所有\(x\)的答案至少是\(\max_{1}^{n}u_i\);对于所有出度大于\(1\)的\(i\),\(x\)的答案至少是\(f_i\)。
  • 实现步骤:倒序处理\(f_i\)、记录每个点的出度、记录度大于\(1\)的最大的\(f_i\)、记录最大的\(u_i\)。
void solve(){
cin >> n >> m;
vector<pii> a(n);
int ma = 0;
for (int i = 0; i < n; i ++){
int len;
cin >> len;
ma = max(ma, len);
vector<int> t(len + 10);
for (int j = 0; j < len; j ++){
int x;
cin >> x;
if (x < len + 10)
t[x] = 1;
}
int c = 1;
for (int j = 0; j <= len + 5 && c <= 2; j ++){ // 处理u,v的值
if (!t[j] && c == 1){
a[i].fi = j;
c ++;
}
else if (!t[j]){
c ++;
a[i].se = j;
break;
}
}
}
sort(a.begin(), a.end(),
[&](pii a, pii b){
return a.fi > b.fi;
});
int mma = 0; // 最大的ui
vector<int> b(ma + 10);
vector<int> chu(ma + 10);
for (auto [x, y] : a){ // 倒序处理
mma = max(mma, x);
int t = max(y, b[y]);
b[x] = max(b[x], t);
chu[x] ++;
} int t2 = -1; // 度大于2的,最大的bi
for (auto [x, y] : a){
if (chu[x] >= 2 && b[x] > t2){
t2 = b[x];
}
}
int ans = 0;
for (int i = 0; i <= ma + 5 && i <= m; i ++){
b[i] = max({i, b[i], t2, mma});
ans += b[i];
}
if (m > ma + 5){
ans += (ma + 6 + m) * (m - ma - 5) / 2;
} cout << ans << endl;
}

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

  1. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

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

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

  3. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  4. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  5. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  6. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  7. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  8. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

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

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

  10. 贪心+模拟 Codeforces Round #288 (Div. 2) C. Anya and Ghosts

    题目传送门 /* 贪心 + 模拟:首先,如果蜡烛的燃烧时间小于最少需要点燃的蜡烛数一定是-1(蜡烛是1秒点一支), num[g[i]]记录每个鬼访问时已点燃的蜡烛数,若不够,tmp为还需要的蜡烛数, ...

随机推荐

  1. 快速上手 KSQL:轻松与数据库交互的利器

    上次我们通过 Docker 安装了 KingbaseES 数据库,今天我们将开始学习并快速上手使用 KSQL.简单来说,KSQL 本质上是一个客户端工具,用于与数据库进行交互.启动后,我们可以像使用普 ...

  2. Reviewbot 开源 | 有些 git commit 记录真的不敢恭维, 我推荐每位工程师都常用 git rebase 和 git commit --amend

    Reviewbot 是七牛云开源的一个项目,旨在提供一个自托管的代码审查服务, 方便做 code review/静态检查, 以及自定义工程规范的落地. 在日常的编程协作中,Git commit 记录的 ...

  3. CF1503E 2-Coloring

    CF1503E 2-Coloring cjx 组合强. 思路 观察一下题目,不难发现只有当黄色形成如下的单峰时才合法. (染错色了,将就一下) 其中两座峰的峰顶高度相加等于 \(m\),为了方便统计, ...

  4. ES6 延展操作符

    延展操作符(Spread operator) 延展操作符 = ...可以在函数调用/数组构造时,将数组表达式或者string在语法层面展开,还可以在构造对象时,将对象表达式按key-value的方式展 ...

  5. 高性能计算-gemm-openmp效率测试(10)

    1. 目标 设计一个程序,使用OpenMP并行化实现矩阵乘法.给定两个矩阵 A 和 B,矩阵大小均为1024*1024,你的任务是计算它们的乘积 C. 要求: (1).使用循环结构体的知识点,包括fo ...

  6. Python源码分析2 - 一个简单的Python程序的执行

    本文主要通过跟踪一个非常简单的Python程序的执行,简单讨论Python实现的基本框架和结构. 要执行Python程序如下,功能非常简单:从1加到10再打印出来 # test program sum ...

  7. JDBC【4】-- jdbc预编译与拼接sql对比

    在jdbc中,有三种方式执行sql,分别是使用Statement(sql拼接),PreparedStatement(预编译),还有一种CallableStatement(存储过程),在这里我就不介绍C ...

  8. Javascript 标签的属性

    1.为HTML标签设置和添加属性 setAttribute() setAttribute()方法可以给HTML标签设置/添加属性(原生的属性或者自定义的属性都可以)添加的属性会存储在标签中 <! ...

  9. regsvr32.exe使用

    regsvr32.exe使用详解:  regsvr32.exe是32位系统下使用的DLL注册和反注册工具,使用它必须通过命令行的方式使用,格式是:  regsvr32 [/u] [/s] [/n] [ ...

  10. OSG开发笔记(三十九):OSG中模型的透明度实现、球体透明度Demo

    前言   在OSG中,对于一些效果未被选中或者包含等业务,需要半透明效果来实现.  本篇描述OSG的半透明实现方式.   Demo      透明 功能概述   透明效果在三维场景中扮演着重要角色,它 ...