

Educational Codeforces Round 168 (Rated for Div.2)
codeforces-edu-168(A-C)
views
| comments
A Strong Password ↗#
题目描述#
给定字符串,现在让我们添加一个字符,使得字符串的价值最大,对于价值是这样看的
- 第一个字符的价值为
2
,- 后面的字符若与前面的字符相同,则价值为
1
,否则价值为2
。 > 让我们输出价值最大的一种情况
解题思路#
我们可以遍历每一个位置,然后找出在哪个位置插入的价值最大,毕竟
n
的取值较小,最后再将其替换为与前后位置不相等的字符即可。
参考代码#
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define pii std::pair<int ,int>
#define fix(x) std::fixed << std::setprecision(x)
const int inf = 1e17 + 50, MAX_N = 1e5 + 50, mod = 1e9 + 7;
void solve () {
std::string s, t;
std::cin >> s;
if(s.size() == 1) {
std::cout << (s[0] == 'z' ? 'a' : 'z') << s[0] << endl;
return;
}
int ma = 0;
for(int i = 0; i < s.size(); i++) {
auto w = s;
w.insert(w.begin() + i, '.');
int res = 2;
for(int j = 1; j < w.size(); j++) {
if (w[j] == w[j - 1]) {
res++;
} else res += 2;
}
if (ma <= res) {
ma = res;
t = w;
}
}
int pos = t.find('.');
int t1 = pos - 1, t2 = pos + 1;
for(auto i = 'a'; i <= 'z'; i++) {
if (i != t[t1] && i != t[t2]) {
t[pos] = i;
break;
}
}
std::cout << t << endl;
}
signed main () {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr), std::cout.tie(nullptr);
int Lazy_boy_ = 1;
std::cin >> Lazy_boy_;
while (Lazy_boy_--) solve();
return 0;
}
cppB Make Three Regions ↗#
题目描述#
给定一个 的一个字符矩阵,其中
.
是开放的,而X
是阻塞的,现在让我们判断有几个点可以将这个字符矩阵分为三个联通的区域。
解题思路#
刚开始的时候,以为是有几个联通的区域,写完
dfs
后,什么WA1
, 我连dfs
都能写错,结果自己是小丑(小插曲) 可以通过给出的图例看出一列只可能有一个点能成为分割点,那么能成为分割点就需要满足四个条件,
- 既然这样,那就简单了
参考代码#
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define pii std::pair<int ,int>
#define fix(x) std::fixed << std::setprecision(x)
const int inf = 1e17 + 50, MAX_N = 1e5 + 50, mod = 1e9 + 7;
void solve () {
int n = 2, m;
std::cin >> m;
std::vector<std::string> s(n);
for(int i = 0; i < n; i++) std::cin >> s[i];
int ans = 0;
for(int i = 1; i < m - 1; i++) {
bool k = true;
k &= (s[0][i] == '.' && s[1][i] == '.');
k &= (s[0][i - 1] != s[1][i - 1]);
k &= (s[0][i + 1] != s[1][i + 1]);
k &= (s[0][i - 1] == s[0][i + 1]);
ans += k ? 1 : 0;
}
std::cout << ans << endl;
}
signed main () {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr), std::cout.tie(nullptr);
int Lazy_boy_ = 1;
std::cin >> Lazy_boy_;
while (Lazy_boy_--) solve();
return 0;
}
cppC Even Positions ↗#
题目描述#
给定字符串,让我们输出字符串匹配的
()
的最短距离,距离是
解题思路#
手指玩玩就行了
参考代码#
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
#define pii std::pair<int ,int>
#define fix(x) std::fixed << std::setprecision(x)
const int inf = 1e17 + 50, MAX_N = 1e5 + 50, mod = 1e9 + 7;
void solve () {
int n;
std::cin >> n;
std::string s;
std::cin >> s;
int pre = 0, ans = 0;
for(int i = 0; i < n; i += 2) {
if (pre > 0) {
pre--;
} else {
pre++;
} ans += pre;
pre += (s[i + 1] == '(' ? 1 : -1);
ans += pre;
}
std::cout << ans << endl;
}
signed main () {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr), std::cout.tie(nullptr);
int Lazy_boy_ = 1;
std::cin >> Lazy_boy_;
while (Lazy_boy_--) solve();
return 0;
}
cpp