Educational Codeforces Round #148 (Rated for Div.2) A~C

news/2024/10/23 9:33:07/

A. New Palindrome

题意:

给定一个回文字符串,问是否可以调换其中两个字符,得到另一个不同的回文字符串。

思路:

题目的条件给的宽松,只是询问是否可以调换,并没有要求调换的位置。

方法一:统计不同的字符是否超过两个即可。超过两个那就一定可以调换。

方法二:依次遍历,只要找个两个不同的相邻字符,直接调换即可。

代码:

#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int N = 2e5 + 10;void solve()
{string s;cin >> s;int n = s.size();//给出的字符串已经是回文串了for (int i = 1; i < n / 2; i++){if (s[i] != s[i - 1]){cout << "YES" << endl;return;}}cout << "NO" << endl;
}int main()
{int t;cin >> t;while (t--){solve();}return 0;
}

B. Maximum Sum

题意:

给定一个长度为 n n n 的数组,可以进行 k k k 次操作。

有两种操作:

  • 操作一:删除数组中的两个最小元素
  • 操作二:删除数组中的最大元素

求所得数组的最大元素之和。

思路:

先排序预处理出前缀和。

如果我们直接模拟,每次选择两种操作中最大的值,那么会发现样例 5 5 5 成功 w a wa wa 掉了。。。

换个思路

我们先处理出只执行操作一得到的最后结果,也就是每次操作都删掉最大数,只保留两个最小数的情况,

然后枚举 k k k 次,从只保留两个最小数一直枚举到只保留最大数,每次都删掉两个最小数,加入最大数,比较大小,最后的答案一定能在这之间找到。

代码:

#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int N = 2e5 + 10;int n, k;
int a[N];
ll s[N];void solve()
{cin >> n >> k;ll sum = 0;for (int i = 1; i <= n; i++) cin >> a[i];sort(a + 1, a + 1 + n);for (int i = 1; i <= n; i++) s[i] = s[i - 1] + a[i];ll ans = 0;for (int i = 0; i <= k; i++){ll now = s[n - (k - i)] - s[2 * i];ans = max(ans, now);}cout << ans << endl;
}int main()
{int t;cin >> t;while (t--){solve();}return 0;
}

C. Contrast Value

题意:

给定一个长度为 n n n 的数组 a a a ,规定该数组的对比度 ∣ a 1 − a 2 ∣ + ∣ a 2 − a 3 ∣ + ⋯ + ∣ a n − 1 − a n ∣ |a_1-a_2|+|a_2-a_3|+⋯+|a_{n-1}-a_n| a1a2+a2a3++an1an .

现在要求构造一个数组 b b b ,满足 b b b 不为空是 a a a 的子序列,且 b b b 的对比度等于 a a a 的对比度,求 b b b 的最小长度。

思路:

仔细观察会发现,如果是一个单调递增或递减的序列,那么它的对比度就等于最大值减最小值

所以我们只需要找到 a a a 数组单调性改变的点并加入到 b b b 数组中就可以了,也就是说,我们要构造的 b b b 数组的长度,就是 a a a 数组中极值点的个数。

另外还要注意边界的情况,初始化 ans = 1 ,表示先加入第一个点,然后开始判断单调性即可。

代码:

#include <bits/stdc++.h>
#define ll long long
#define endl '\n'
using namespace std;
const int N = 3e5 + 10;int n;
int a[N];void solve()
{cin >> n;for (int i = 1; i <= n; i++){cin >> a[i];}int ans = 1;int f = -1;for (int i = 2; i <= n; i++){if (f != 1 && a[i - 1] < a[i]){  // f=1代表单调递增ans++;f = 1;continue;}if (f != 0 && a[i - 1] > a[i]){  // f=0代表单调递减ans++;f = 0;continue;}}cout << ans << endl;
}int main()
{int t;cin >> t;while (t--){solve();}return 0;
}


http://www.ppmy.cn/news/66429.html

相关文章

LeetCode5. 最长回文子串

写在前面&#xff1a; 题目链接&#xff1a;LeetCode5. 最长回文子串 编程语言&#xff1a;C 题目难度&#xff1a;中等 一、题目描述 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。 如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。 示例…

数据库系统工程师——第三章 数据结构与算法

文章目录 &#x1f4c2; 第三章、数据结构与算法 &#x1f4c1; 3.1 线性结构 &#x1f4d6; 3.1.1 线性表 &#x1f4d6; 3.1.2 栈和队列 &#x1f4d6; 3.1.3 串 &#x1f4c1; 3.2 数组和矩阵 &#x1f4c1; 3.3 树和图 &#x1f4d6; 3.3.1 树 &#x1f4d6; 3.3.2 图 &…

windows 编译 opencv

编译需要的基础工具 #cmake是配置构建工具&#xff0c;mingw是编译工具 cmake CMake是一款跨平台的编译管理工具&#xff0c;可以自动生成各种不同编译环境&#xff08;如Makefile、Visual Studio Solution等&#xff09;&#xff0c;从而实现在不同平台上进行代码编译的目的…

亲测好用|甲方、专家和领导,用三维模型汇报方案如何投其所好?

身为设计方的你&#xff0c;有没有这样的经历&#xff1a; ➤ 一个非常优秀的方案未能被甲方采纳&#xff0c;反而甲方选择了一个不如自己的方案&#xff0c;造成了很大的遗憾&#xff1b; ➤ 在讲述自己的设计方案的时候&#xff0c;经常越说越散&#xff0c;甚至到了最后自…

MD-MTSP:遗传算法GA求解多仓库多旅行商问题(提供MATLAB代码,可以修改旅行商个数及起点)

一、多仓库多旅行商问题 多旅行商问题&#xff08;Multiple Traveling Salesman Problem, MTSP&#xff09;是著名的旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;的延伸&#xff0c;多旅行商问题定义为&#xff1a;给定一个&#x1d45b;座城市的城市集…

MySQL 字段为 NULL 的坑,你踩过吗?

前言 很多小知识点&#xff0c;我以为自己懂了&#xff0c;实际没搞透。 数据库字段允许空值(null)的问题&#xff0c;你遇到过吗&#xff1f; 在验证问题之前&#xff0c;我们先建一张测试表及测试数据。 构建的测试数据&#xff0c;如下图所示&#xff1a; 有了上面的表及…

Feign踩坑源码分析--@FeignClient注入容器

一. EnableFeignClients 1.1.类介绍 从上面注释可以看出是扫描声明了FeignClient接口的类&#xff0c;还引入了 FeignClientsRegistrar类&#xff0c;从字面意思可以看出是进行了 FeignClient 客户端类的注册。 1.2.FeignClientsRegistrar 详解 最主要的一个方法&#xff1a;re…

南大通用数据库-Gbase-8a-学习-35-rmt(远程导出数据文件)

目录 一、测试环境 二、引入 三、rmt导出流程 四、Linux环境模拟实验 1、不加rmt导出数据 2、加rmt导出数据 一、测试环境 名称值CPUIntel(R) Core(TM) i5-1035G1 CPU 1.00GHz操作系统CentOS Linux release 7.9.2009 (Core)内存3G逻辑核数2目的端Gbase8a版本8.6.2-R43源…