Codeforces Round #789 (Div. 2)
A. Tokitsukaze and All Zero Sequence
题意
Tokitsukaze 有一个长度为 n 的序列 a。 对于每个操作,她选择两个数字 ai 和 aj (i≠j; 1≤i,j≤n)。
如果 ai=aj,则将其中之一更改为 0,否则将它们都更改为 min(ai,aj)。
Tokitsukaze 想知道将序列中的所有数字变为 0 的最小操作次数。可以证明答案总是存在的。
思路
由题意可知
如果 a 中含有 0 只要把所以非零数和 0 进行比较就可以了,需要操作的次数为非 0 数的个数。
如果 a 中没有 0 但是有两个相同的数,操作数为 n
如果 a 中没有相同的数,操作数为 n+1
代码
#include <bits/stdc++.h>
using namespace std; void solve()
{
int n;
cin >> n;
map<int, int> ma;
for (int i = 1; i <= n; i++)
{
int a;
cin >> a;
ma[a]++;
}
if (ma[0] > 0)
{
cout << n - ma[0] << endl;
return;
}
for (auto x : ma)
{
if (x.second >= 2)
{
cout << n << endl;
return ;
}
}
cout << n + 1 << endl;
} int main()
{
int t;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
B1. Tokitsukaze and Good 01-String (easy version)
题意
这是问题的简单版本。两个版本之间的唯一区别是,较难的版本额外要求最小数量的子段。
Tokitsukaze 有一个二进制字符串s长度n,仅由0和1组成,n是偶数。
现在Tokitsukaze s成最小数量的连续子段,并且对于每个子段,每个子段中的所有数都是相同的。之后,s如果所有子段的长度都是偶数,则认为是好的。
例如,如果ss为“ 11001111 ”,将分为“ 11 ”、“ 00 ”和“ 1111 ”。它们的长度是2,2,4分别是偶数,所以“ 11001111 ”是好的。
另一个例子,如果s为“ 1110011000 ”,将分为“ 111 ”、“ 00 ”、“ 11 ”和“ 000 ”,它们的长度分别为3,2,2,3. 显然,“ 1110011000 ”不好。
Tokitsukaze 想使s改变一些位置的值. 具体来说,她可以执行任意次数的操作:改变 si 为“ 0 ”或“ 1 ”(1≤i≤n)。
你能告诉她最少的修改次数吗?
思路
因为字段长度都为偶数,因此我们可以每次判断2位,这2位必须为相同的数。
我们只要记录有几个不同的就是要修改的次数。
代码
#include <bits/stdc++.h>
using namespace std; void solve()
{
int n;
string s;
cin >> n >> s;
int cnt = 0;
for (int i = 0; i < n; i = i + 2)
{
if (s[i] != s[i + 1])
cnt++;
}
cout << cnt << endl;
} int main()
{
int t;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
B2. Tokitsukaze and Good 01-String (hard version)
题意
这是问题的困难版本。两个版本之间的唯一区别是,较难的版本额外要求最小数量的子段。
Tokitsukaze 有一个二进制字符串s长度n,仅由0和1组成,n是偶数。
现在Tokitsukaze s成最小数量的连续子段,并且对于每个子段,每个子段中的所有数都是相同的。之后,s如果所有子段的长度都是偶数,则认为是好的。
例如,如果ss为“ 11001111 ”,将分为“ 11 ”、“ 00 ”和“ 1111 ”。它们的长度是2,2,4分别是偶数,所以“ 11001111 ”是好的。
另一个例子,如果s为“ 1110011000 ”,将分为“ 111 ”、“ 00 ”、“ 11 ”和“ 000 ”,它们的长度分别为3,2,2,3. 显然,“ 1110011000 ”不好。
Tokitsukaze 想使s改变一些位置的值. 具体来说,她可以执行任意次数的操作:改变 si 为“ 0 ”或“ 1 ”(1≤i≤n)。
你能告诉她最少的修改次数吗?同时,她还想知道最小的子段数s可以在所有操作数最少的解决方案中进行划分。
思路
计算次数的方法同上。
我们可以在每次判断2个数不同时对其进行修改,每次都修改成和左边相同。
然后在遍历求字段数。
需要注意的是当开头的两个数不同时我们可以把它们都赋值为1 或 0 ,分别求出子段数再输出最小值。
代码
#include <bits/stdc++.h>
using namespace std; void solve()
{
int n;
string s;
cin >> n >> s;
int cnt = 0;
string s1 = s, s2 = s;
if (s[0] != s[1])
{
cnt = 1;
s1[0] = '0';
s1[1] = '0';
s2[0] = '1';
s2[1] = '1';
for (int i = 2; i < n - 1; i = i + 2)
{
if (s[i] != s[i + 1])
{
cnt++;
if (s1[i - 1] == '1')
{
s1[i] = '1';
s1[i + 1] = '1';
}
else
{
s1[i] = '0';
s1[i + 1] = '0';
}
if (s2[i - 1] == '1')
{
s2[i] = '1';
s2[i + 1] = '1';
}
else
{
s2[i] = '0';
s2[i + 1] = '0';
}
}
}
int a = 0, b = 0;
for (int i = 1; i < n; i++)
{
if (s1[i] != s1[i - 1])
a++;
if (s2[i] != s2[i - 1])
b++;
}
cout << cnt << " " << min(a, b) + 1 << endl;
return;
}
for (int i = 2; i < n - 1; i = i + 2)
{
if (s[i] != s[i + 1])
{
cnt++;
if (s[i - 1] == '1')
{
s[i] = '1';
s[i + 1] = '1';
}
else
{
s[i] = '0';
s[i + 1] = '0';
}
}
}
int a = 0;
for (int i = 1; i < n; i++)
{
if (s[i] != s[i - 1])
a++;
}
cout << cnt << " " << a + 1 << endl;
} int main()
{
int t;
cin >> t;
while (t--)
{
solve();
}
return 0;
}
C. Tokitsukaze and Strange Inequality
题意
给定一个序列 s ,找出 [a,b,c,d](1<=a<b<c<d<=n),满足 的数量。
思路
固定 b 和 c。
每次只需找到 [1,b−1]中小于 的值的数量以及 [c+1,n] 中小于
的数量,相乘之后累加就是答案。
预处理一个前缀和数组 dp[i][j],表示前 i 个中小于等于 j 的数量有多少个。
代码
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 5010;
int T, n, s[N], dp[N][N];
void solve()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
dp[i][j] = 0;
for (int i = 1; i <= n; i++)
{
cin >> s[i];
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
dp[i][j] += dp[i - 1][j];
}
for (int j = s[i]; j <= n; j++)
dp[i][j]++;
}
ll ans = 0;
for (int i = 2; i <= n - 2; i++)
{
for (int j = i + 1; j <= n - 1; j++)
{
ll a = dp[i - 1][s[j]];
ll b = dp[n][s[i]] - dp[j][s[i]];
ans += a * b;
}
}
cout << ans << endl;
;
}
int main()
{
ios::sync_with_stdio(0);
cin >> T;
while (T--)
{
solve();
}
return 0;
}
Codeforces Round #789 (Div. 2)的更多相关文章
- Codeforces Round #789 (Div. 2) A-C
Codeforces Round #789 (Div. 2) A-C A 题目 https://codeforces.com/problemset/problem/1677/A 题解 思路 知识点:模 ...
- 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 ...
- Codeforces Round #354 (Div. 2) ABCD
Codeforces Round #354 (Div. 2) Problems # Name A Nicholas and Permutation standard input/out ...
- Codeforces Round #368 (Div. 2)
直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...
- cf之路,1,Codeforces Round #345 (Div. 2)
cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅..... ...
- Codeforces Round #279 (Div. 2) ABCDE
Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems # Name A Team Olympiad standard input/outpu ...
- 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 ...
- 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 ...
- Codeforces Round #371 (Div. 1)
A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...
随机推荐
- 图解 Git 工作原理
此页图解 git 中的最常用命令.如果你稍微理解git的工作原理,这篇文章能够让你理解的更透彻. 基本用法 上面的四条命令在工作目录.暂存目录(也叫做索引)和仓库之间复制文件. git add fil ...
- Android添加背景图片和设置app图标
Android添加背景图片和设置app图标 Android 添加背景图片 第一步:找到你要当做背景的图片,并下载下来 第二步:将图片复制到app->res->mipmap文件夹下 第三步: ...
- Python 散列表查询_进入<哈希函数>为结界的世界
1. 前言 哈希表或称为散列表,是一种常见的.使用频率非常高的数据存储方案. 哈希表属于抽象数据结构,需要开发者按哈希表数据结构的存储要求进行 API 定制,对于大部分高级语言而言,都会提供已经实现好 ...
- 893. Groups of Special-Equivalent Strings - LeetCode
Question 893. Groups of Special-Equivalent Strings Solution 题目大意: AB两个字符串相等的条件是:A中偶数位出现的字符与B中偶数位出现的字 ...
- 好客租房54-props深入(children属性)
children属性 表示组件标签的子节点 当组件标签有子节点是 props就会有该属性 props中的组件可以是任意属性 都是可以渲染的 //导入react import React fro ...
- WPF 分组
分组和树形结构是不一样的. 树形结构是以递归形式存在.分组是以键值对存在的形式,类似于GroupBy这样的形式. 举个例子 ID NAME SEX Class 1 张三 男 1 2 李四 女 2 3 ...
- 如何在 pyqt 中自定义工具提示 ToolTip
前言 Qt 自带的工具提示样式不太好看,就算加了样式表也时不时会失效,同时工具提示没有阴影,看起来就更难受了.所以本篇博客将会介绍自定义工具提示的方法,效果如下图所示: 实现过程 工具提示其实就是一个 ...
- springcloud 断路器
https://www.jb51.net/article/138572.htm 参考资料: http://www.cnblogs.com/ulysses-you/p/7281662.html http ...
- linux运维基础2
内容概要 虚拟机关键配置名词解释 远程链接工具 xshell基本使用 linux命令准则 系统运⾏命令 常用快捷方式 文件命令操作 文件编辑命令 内容详情 虚拟机关键配置名词解释 # 虚拟网络编辑器说 ...
- Amazon 消息订阅对接
亚马逊的api 谁用谁知道...... 除了坑还是坑 头疼一周整出来,分享给铁汁们 amazon 的订阅思维,我只能说外国人脑回路有点长 下面就讲讲具体流程步骤: 第一步: 参照官方教程:设置通知(A ...