1 条题解
-
4
- 很明显,能删的要立刻删,它们会阻碍交换。
- 一共要删除 列,这需要 点体力。
- 由于删除时总要保证两列字符一致,故两列
X
的个数要相等。设两列X
的个数原来相差 个,则交换一行XZ
(或ZX
)会使得某一列减少一个X
,而另一列增加一个X
,差值减少 ,故这需要 点体力。 - 由样例 可知,删除两行相邻的
XZ
和ZX
需要 点额外体力(删除所需的体力已经计算过了)。上一步完成后,ZX
和XZ
一定都存在(否则两列X
的个数不可能相同),因此总会有两行相邻的XZ
和ZX
。设上一步结束后还剩下 列,则这需要 点体力。
#include <bits/stdc++.h> using namespace std; int main() { freopen("pairs.in", "r", stdin); freopen("pairs.out", "w", stdout); int n; cin >> n; int b = 0, c = 0; for (int i = 1; i <= n; i++) { string s; cin >> s; if (s == "XZ") b++, c++; if (s == "ZX") b--, c++; } int a = n + abs(b) / 2 + c / 2; cout << a << endl; return 0; }
- 1
信息
- ID
- 2
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 2
- 标签
- 递交数
- 35
- 已通过
- 7
- 上传者