首页 > 其他分享 >Codeforces Round 738 (Div. 2) B. Mocha and Red and Blue

Codeforces Round 738 (Div. 2) B. Mocha and Red and Blue

时间:2023-09-26 18:15:37浏览次数:42  
标签:Blue std string 字符 int Codeforces ret Mocha str

给一个字符串,包含字符 \(B\) , \(R\) ,\(?\) 。其中 \(?\) 可能为 \(B\) 或 \(R\) 。

规定不完美数为字符串中相同字符连续出现的次数,询问一个字符串的最少可能不完美数。

观察到 \(BR\) 或 \(RB\) 需要尽可能多,于是考虑尽可能让相邻字符不同。

容易证明从左往右扫和从右往左扫贡献一样。

  • 对于一串 \(t\) ,\(xty\) 和 \(ytx\) 贡献一样。

于是可以从左到右扫,让当前的 \(?\) 变为不同于左侧字符的字符。

问题在于若 \(?\) 在第一位如何解决。

于是可以枚举 \(s_0\) 为 \(R\) 和 \(B\) ,得到 \(s_1, s_2\) ,再计算更优的一个。

view
#include <bits/stdc++.h>
int calc(std::string s) {
	int ret = 0;
	for (int i = 2; i < s.length(); i++) ret += s[i] != s[i-1];
	return ret;
}
void solve() {
	int n; std::cin >> n;
	std::string str; std::cin >> str;
	std::string a = "R" + str;
	std::string b = "B" + str;
	for (int i = 1; i <= n; i++) {
		if (a[i] == '?') {
			if (a[i-1] == 'R') a[i] = 'B';
			if (a[i-1] == 'B') a[i] = 'R';
		}
		if (b[i] == '?') {
			if (b[i-1] == 'R') b[i] = 'B';
			if (b[i-1] == 'B') b[i] = 'R';
		}
	}
	if (calc(a) > calc(b)) std::cout << std::string(a.begin()+1,a.end()) << "\n";
	else std::cout << std::string(b.begin()+1, b.end()) << "\n";
}
int main() {
	int _ = 1; std::cin >> _;
	while (_--) solve();
	return 0;
}

标签:Blue,std,string,字符,int,Codeforces,ret,Mocha,str
From: https://www.cnblogs.com/zsxuan/p/17730841.html

相关文章

  • Codeforces Round 750 (Div. 2) B. Luntik and Subsequences
    给一个数组\(a_1,a_2,\cdots,a_n\),定义\(s=\sum_{i=1}^{n}a_i\)。询问有多少个\(a\)的子序列满足\(\suma_{i_k}=s-1\)。显然要选出一个\(1\)不加入子序列,任意一个\(0\)可以加入或不加入子序列。于是\(ans=\binom{cnt1}{1}\cdot2^{cnt0}\)。vi......
  • Codeforces Round 899 (Div. 2)
    CodeforcesRound899(Div.2)A.IncreasingSequence解题思路:从左往右一个个看,从1开始,如果当前位相同\(+2\),否则\(+1\)。代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constintN=1e6+10;constintM=2*M;constintmod=1e9+......
  • Educational Codeforces Round 155 D (CF1879_D)
    题目大意给一个长度为\(n\)的数组,求\(\Sigma_{i=1}^{n}\Sigma_{j=i}^{n}区间异或和\times(j-i+1)\)其中\(n\leq3e5,~a[i]\leq1e9\)分析首先注意到由\(l\)到\(r\)的区间异或和可以转化为\(sum_{l-1}~XOR~sum_r\)因此,对于每一个点\(x\),无论它作为上述的\(sum......
  • Educational Codeforces Round 155 (Rated for Div. 2)
    EducationalCodeforcesRound155(RatedforDiv.2)A.Rigged!解题思路:若存在\(s[i]>=s[1]\)并且\(e[i]>=e[i]\),那么答案为\(-1\).否则,答案为\(s[1]\).代码:#include<bits/stdc++.h>usingnamespacestd;usingll=longlong;constintN=1e6+10;con......
  • Codeforces463-E.Team Work-组合数、DP
    Codeforces463-E.TeamWork题意:求\[\sum_{i=1}^n\binom{n}{i}i^k\]其中\(1\leqn\leq10^9\),\(1\leqk\leq5000\)。题解:其实这个题\(k\)的数据范围就已经暗示了做法的复杂度——应该是要去考虑根据\(k\)去递推了。首先为了方便,\(i=0\)这一项完全可以补上,用类似生成函......
  • Educational Codeforces Round 155 (Rated for Div. 2)
    比赛链接A.Rigged!题目链接就是一个比较简单的模拟就可以解决,如何判断能不能第一只需要考虑比他力量大的耐力是不是也比他大就行,而只要比他大,他就不可能第一,否则输出他的力量作为标杆就行,这样也可以避免比他力量小的也可以举起来。#include<bits/stdc++.h>usingnamespaces......
  • 她是 Codeforces 第四名,也是知名视频平台bilibili的“网红”
    在2023年9月24日~9月25日举办的EducationalCodeforcesRound155(RatedforDiv.2)上,以优秀成绩拿下第四名仅学了ACM一年的Nanani,成为最夺目的选手之一。而且虽然是仅学了一年的选手,但她取得优异成绩后,不少网友并不感到陌生,纷纷留言:这不是bilibili上天天直播爆切神仙题的妹子......
  • CodeForces 1062F Upgrading Cities
    洛谷传送门CF传送门考虑一个子问题:求从某个点\(u\)能到达的点数。如果要精确地计算出来,最优解法只能是\(O(\frac{n^2}{w})\)的bitset。但是我们还没有利用到题目的性质,我们只需要判断一个点是否至多有一个点互不可达。考虑拓扑排序的过程,队列里面的点两两互不可达。维护......
  • Codeforces 1868D. Flower-like Pseudotree
    题目链接:D-Flower-likePseudotree题目大意:给定度数数组\({d_n}\),要求构造一个\(n\)个点\(n\)条边的连通图(也就是基环树),允许有重边,但不能有自环。需要满足第\(i\)个点的度数恰好为\(d_i\),并且将环上的边全部删去后,剩下的每棵树的高度(以原先在环上的点为根)相同。首先考......
  • CodeForces 1149D Abandoning Roads
    洛谷传送门CF传送门考虑一条\(1\toi\)的路径是否在最小生成树上。称边权为\(a\)的边为轻边,边权为\(b\)的边为重边。轻边若不成环则一定在最小生成树上,因此先把轻边合并,这样形成了若干连通块。那么如果两点在一个连通块,它们只能通过轻边互达。同时,因为是树上路径,所......