Codeforces Round 732 (Div
AquaMoon and Strange Sort
有 \(n\) 个人从左到右站成一排,从左数第 \(i\) 个人的衣服上印着 \(a_i\)。每个人的朝向可以是朝左、朝右。一开始所有人的方向都是朝右。
您可以对这些人做一些“操作”,每次操作允许您找两个相邻的人让他们交换顺序,但是在操作之后,两人都会掉头,也就是朝向都从朝右变成朝左或者相反。
现求是否存在一种操作方法使得操作完成后这 \(n\) 个人衣服上的数字 \(a_1, a_2, \ldots , a_n\) 从左往右读单调不减,并且最后所有人的方向都朝右。
题解:思维
容易发现:如果一个人在交换顺序后方向始终向右的话,那么我们必须保证其交换次数为偶数
同时题目限制我们只有相邻才能交换
所以我们发现,如果存在一种合法的操作方法使得\(n\)个人的顺序单调递增,那么原本在偶数位置上的数字仍然会在偶数位置,原本在奇数位置上的数字仍然会在奇数位置
所以我们不妨记录原本序列中偶数位置和奇数位置的状态,然后将该序列排序后,检查排序后偶数和奇数位置上的状态有没有变化即可
const int N = 2e5 + 10, M = 4e5 + 10;
int n;
int a[N], b[N];
int mp[N][2];
void solve()
{
cin >> n;
for (int i = 1; i <= 1e5; ++i)
mp[i][0] = mp[i][1] = 0;
for (int i = 1; i <= n; ++i)
{
cin >> a[i];
b[i] = a[i];
mp[a[i]][i % 2]++;
}
sort(b + 1, b + n + 1);
for (int i = 1; i <= n; ++i)
mp[b[i]][i % 2]--;
for (int i = 1; i <= n; ++i)
{
if (mp[a[i]][i % 2])
{
cout << "NO" << endl;
return;
}
}
cout << "YES" << endl;
}
AquaMoon and Chess
你有一个长为 \(n\) 的棋盘,这个棋盘上有一些棋子,你可以进行如下操作:
如果第 \(i + 2\) 个位置是空的,且第 \(i + 1\) 个位置非空,则可以将第 \(i\) 个位置的棋子挪到第 \(i + 2\) 个位置 (\(i + 2 \leq n\)).
如果第 \(i - 2\) 个位置是空的,且第 \(i - 1\) 个位置非空,则可以将第 \(i\) 个位置的棋子挪到第 \(i - 2\) 个位置 (\(i - 2 \geq 1\)).
现在将给出一个棋盘的初始状态,求可以通过上述操作可以到达的状态数,你可以进行任意次操作,答案对 \(998244353\) 取模.
题解:思维 + 组合计数
容易发现:如果现在棋盘为
0110,那么最后能够到达的所有状态为0110,1100,0011,我们发现如果我们把11捆绑看成一个整体后,那么我们观察发现所有可以到达的状态就是11和0随意组合排序那么如果现在棋盘为
01110,那么最后能够到达的所有状态为01110,11010,00111,那么我们也可以发现,如果现在存在相邻的奇数个1的情况,但是我们发现,如果我们将11看成整体的话,实际上另一个1位置是随着11和0位置的变化而被动移动的所以影响这个棋盘状态变化的是
11和0之间的组合顺序,我们可以忽略单个1对整体状态的影响假设
11的个数为cnt2,0的个数为cnt0,那么答案为\[C_{cnt0+cnt2}^{cnt2}
\]
const int N = 2e5 + 10, M = 4e5 + 10;
int n;
int qpow(int a, int b, int p)
{
int res = 1;
while (b)
{
if (b & 1)
res = res * a % p;
b >>= 1;
a = a * a % p;
}
return res % p;
}
int C(int a, int b, int p)
{
int res = 1;
for (int i = 1, j = a; i <= b; ++i, --j)
{
res = res * j % p;
res = res * qpow(i, p - 2, p) % p;
}
return res % p;
}
void solve()
{
cin >> n;
string s;
cin >> s;
int cnt0 = 0, cnt2 = 0;
for (int i = 0; i < n; ++i)
{
if (s[i] == '0')
cnt0++;
else if (s[i] == '1')
{
if (s[i + 1] == '1')
{
cnt2++;
i++;
}
}
}
cout << C(cnt0 + cnt2, cnt0, mod) << endl;
}
Codeforces Round 732 (Div的更多相关文章
- Codeforces Round #732 (Div. 2)【ABCD】
比赛链接:https://codeforces.com/contest/1546 A. AquaMoon and Two Arrays 题意 给出两个大小为 \(n\) 的数组 \(a, b\) ,每 ...
- Codeforces Round #732 (Div.1) 题解
实在是打击人信心的一场比赛啊--一不注意就掉了 50+ 分,rating 没了啊/ll/dk/wq/kk A Weak pretest!!!!!11 /fn/fn/fn 一个很显然的注意点是在交换前后 ...
- 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后和给 ...
随机推荐
- ASP.NET Core Library – Google libphonenumber (Country Dial Code)
前言 Google libphonenumber 是 Java 的, ASP.NET Core 只是 port 过去而已. 以前在 angular2 学习笔记 ( translate, i18n 翻译 ...
- DTO转VO工具
data工具,实现了对象拷贝 DTO -> VO 只需要实现一个类即可 data-utils data工具,实现了对象拷贝DTO -> VO 解决的问题 Mapstruct需要安插件!!! ...
- 5G网络架构的演进趋势
5G网络架构的演进趋势 概述 5G移动通信网络系统包括5GC(5G Core Network,5G核心网)和NG-RAN(Next Generation Radio Access Network,5G ...
- Clickhouse-insert 数据写入不成功问题
[应用场景] 对副本表进行 alter delete 数据后,同样的数据再进行 insert into 操作. [问题复现] [问题解释] 对副本表 insert 语句的数据会划分为数据块. 每个数据 ...
- 2021 IT运维巡展北京站圆满落幕,北京智和信通荣获IT运维样板工程
10月21日,以"数智转型 运维赋能"为主题的"2021(第十二届)IT运维巡展北京站"圆满落幕.会上行业专家.企业代表以及用户代表等共聚一堂,探讨数智时代下I ...
- CMake 属性之目录属性
[写在前面] CMake 的目录属性是指在特定目录(及其子目录)范围内有效的设置. 这些属性不同于全局变量或目标(Target)属性,它们提供了一种机制,允许开发者为项目中的不同部分定义不同的构建行为 ...
- 【01】DataFrame的创建和属性
DataFrame是一个表格型的数据结构,可以看成就是excel中的表格. 官方文档:https://pandas.pydata.org/docs/reference/frame.html DataF ...
- dotnet 泛型委托 ACTION FUNC
void Main() { // 泛型委托 ACTION FUNC // 3. 创建委托实例 TestDele<string> testDele = new TestDele<str ...
- js中,什么是数组 , 数组有几种创建方式?
1. 什么是数组? 数组是可以把一组相关的数据一起存放,并提供方便的访问(存取) 数组是指一组数据的集合,其中每个数据被称作元素(数组单元),数组单元可以是任意类型的数据,数组是一种将一组数据存储在单 ...
- 删除 设置 获取 cookies 的第三方包 js-cookies
// 第三方包 js-cookies 是一个操作cookies的包 import Cookies from 'js-cookie' // Cookies.set(key,value) 存值 // Co ...