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后和给 ...
随机推荐
- [TK] 选课 hzoj-tg#279
该题目是一道树上背包问题,题目的全部思路已写在 树上背包问题 中. 该题目代码只供辅助理解. struct edge{ int to,w; }; vector<edge> e[1001]; ...
- [Tkey] Transport Nekomusume II
CL-20 考虑定义一条有向边 \(u\rightarrow v\) 的意义为 \(u\) 把窝让给了 \(v\),那么每个点一定入度为 \(1\),所有的边会形成一个外向基环树森林. 贪心地把猫娘按 ...
- USB TCPM
USB TCPM(Type-C Port Manager)的主要作用是管理 USB Type-C 端口的连接和电源传输协议(USB Power Delivery, PD),确保设备正确识别.协商和切换 ...
- android 代码如何增加atrace跟踪
在 Android 代码中增加 Atrace 跟踪,可以使用 Android 提供的 android.os.Trace 类.这允许你在应用代码中手动添加自定义的跟踪点,以捕获特定代码段的执行情况.以下 ...
- 常用的linux命令 docker常用命令
mkdir 新建目录 rmdir 删除目录 rm只能删除文件,不能删除目录 cp test.txt Documents 进入容器的目录 docker exec -it <container_id ...
- Vue 如何实现组件切换的时候,让组件缓存,不会被销毁
使用场景:我们开发项目的时候,会遇到组件之间的切换,一般都是创建组件销毁组件来回切换 :但是现在需求是切换组件的时候,另一个组件不会销毁: 基于这个需求 ,我们使用 keep-live 组件包裹起来要 ...
- .NET高级调试 - 3.7对象检查
简介 在大多数调试会话中,首先需要检查的项目就是分析应用程序的状态.在确认程序的问题是某种无效状态造成的,我们便需要分析程序是如何变成无效状态的.那么在分析过程中,需要为我们深入了解对象的各种审查方法 ...
- 10 Self-Attention(自注意力机制)
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- Codeforces 做题记录 2023-10-22
远古做题记录.大概是 22 年写的. CF1858E1 Rollbacks (Easy Version) Description 给定一个初始为空的数列 \(a\),你需要处理以下操作: + x 将数 ...
- 云原生周刊:Kubernetes v1.31 中的移除和主要变更|2024.7.22
开源项目 Argo Rollouts Argo Rollouts 是一个 Kubernetes 控制器和一组自定义资源定义(CRDs),提供高级部署功能,例如蓝绿部署.金丝雀部署.金丝雀分析.实验以及 ...