

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