首页 > 其他分享 >[ARC169E] Avoid Boring Matches

[ARC169E] Avoid Boring Matches

时间:2023-12-12 12:44:06浏览次数:24  
标签:遇到 int Boring Avoid 原串 ARC169E ans 考虑

题解链接

非常厉害的一道题。

考虑无解是什么情况? R 的个数超过 \(2^{n-1}\)

先考虑如何判定。从前往后考虑,如果遇到一个 B,那么如果后面有 R,就选最靠前的 R,否则选最靠后的一个 B.如果遇到 R,就选最靠后的一个 B

但是这个判定很繁琐。我们考虑求出一个合法序列,使得他的 B 尽量靠后。设长度为 \(2^i\) 的 B 尽量靠后的串为 \(t_i\),那么 \(t_0=\)R,考虑从 \(t_{i-1}\) 扩展到 \(t_i\).

遍历 \(t_{i-1}\),那么遇到一个 R 的时候,他匹配的是最远的 B,\(t_i\) 增加 R。遇到一个 B 的时候,他匹配最近的 R,所以增加 BR,剩下的用 B 补全即可。

然后有一个结论.考虑原串中前 \(2^{n-1}\) 个,设第 \(i\) 个 B 在 \(g_i\) 出, \(t_n\) 第 \(i\) 个 B 在 \(h_i\) 处。当且仅当 \(\forall i,g_i\le h_i\),串合法。

感性理解一下,如果原串有个 B 在 \(t_n\) 的 B 的后面,那么他就匹配不到 R
所以最终答案就是原串的 B 和 \(t_n\) 的 B 的位置差加起来就行了。

// LUOGU_RID: 139274680
#include<bits/stdc++.h>
using namespace std;
const int N=3e5+5;
int n,m,k,g[N],c;
long long ans; 
char s[N],t[19][N];
int main()
{
	scanf("%d%s",&n,s+1);
	for(int i=1;s[i];i++)
		if(s[i]=='R')
			++c;
	if(c>(1<<n-1))
		return puts("-1"),0;
	t[0][1]='R';
	for(int i=1;i<=n;i++)
	{
		m=0;
		for(int j=1;j<=(1<<i-1);j++)
		{
			if(t[i-1][j]=='B')
				t[i][++m]='B',t[i][++m]='R';
			else 
				t[i][++m]='R';
		}
		while(m<(1<<i))
			t[i][++m]='B';
	}
	m=0;
	for(int i=1;i<=(1<<n);i++)
		if(t[n][i]=='B')
			g[++m]=i;
	for(int i=1;i<=(1<<n);i++)
	{
		if(s[i]=='B')
		{
			++k;
			if(k>m)
				break;
			ans+=max(i-g[k],0);
		}
	}
	printf("%lld",ans);
}

标签:遇到,int,Boring,Avoid,原串,ARC169E,ans,考虑
From: https://www.cnblogs.com/mekoszc/p/17896527.html

相关文章

  • https://avoid.overfit.cn/post/548ad625830a4645beba60a37a2b59d6
    本文从数据科学家的角度来研究检索增强生成(retrieve-augmentedGeneration,RAG)管道。讨论潜在的“超参数”,这些参数都可以通过实验来提高RAG管道的性能。与本文还将介绍可以应用的不同策略,这些策略虽然不是超参数,但对性能也会产生很大的影响。本文将介绍以下索引阶段的“超......
  • Go - Avoiding Test Fixtures in Performance Tests
    Problem: Youwanttocustomizetheperformanceteststoavoidbenchmarkingtestfixtures.Solution: Youcanstart,stop,andresetthebenchmarktimersusingtheStartTimer,StopTimer,andResetTimer,respectively.Thiswillallowyoutheflexibilityt......
  • Codeforces Global Round 11 A. Avoiding Zero
    给一个大小为\(n\)的数组\(a_1,a_2,\cdots,a_n\)。你需要构造一个大小为\(n\)的数组\(b\)且满足以下条件:数组\(b\)是数组\(a\)的冲排列对于\(\forallk=1,2,\cdots,n\),\(\sum_{i=1}^{k}b_i\neq0\)。输出任意一组构造,或者回答不可能。若\(\sum_{i......
  • [ARC155D] Avoid Coprime Game
    [ARC155D]AvoidCoprimeGame一个暴力思路是直接记录选了哪些\(a\)然后转移,但是我们显然没办法将已选择的\(a\)的信息用状压全部记录下来。但是你注意到题目中对\(a\)的选择有着不错的性质,具体如下:若确定当前\(G\),则先前选择的所有\(a_i\)均满足\(G|a_i\)。若经......
  • CodeForces 814E An unavoidable detour for home 题解
    更好的阅读体验题意题目链接(洛谷翻译)给出\(n\)个点,和每个点的度\(d_i\)让你构造出一张无向图满足以下两条性质:点\(1\)到点\(i\)仅有唯一一条最短路。点\(1\)到点\(i\)的最短路长度大于等于点\(1\)到点\(i-1\)的最短路长度。求能构成满足条件的无向图......
  • react native 使用 KeyboardAvoidingView 无效
    组件介绍:该组件将根据键盘高度自动调整其高度、位置或底部填充,以在显示虚拟键盘时保持可见。官方文档:KeyboardAvoidingView文档地址遇到的问题:KeyboardAvoidingView标签要设置behavior={Platform.OS==="ios"?"padding":"height"},iOS系统要使用padding否则样式可能......
  • Automate the Boring Stuff with Python(读后感)
    这里主要就是记录下这本书的主要内容,自己以后想起来的时候可以直接看这个博客整本书的内容看目录就很清楚了,所以下面就是目录加自己的一点心得体会Python编程基础基础中的基础,但有个很重要的轮子PrettyPrint:把输出打印的更漂亮自动化任务这是重点,一次性肯定记不下来,智能以后......
  • 【拆贡献】CF1422F Boring Queries
    考虑质因数分解,我们求区间的\(lcm\)就是\(\proda_i\)除以一些东西。不难发现如果算\(x^k\inlcm\)那么我们只能算一次,那么我们直接把这个东西挂在前一个出现的位置即可。使用主席树维护即可。这个题,很难。//LUOGU_RID:123092767#include<bits/stdc++.h>#definere......
  • CF1422F Boring Queries
    CF1422FBoringQueries题意询问区间\(lcm\),强制在线。题解首先考虑每个质因子对于答案的贡献。对于一个质因子\(p_i\)来说其对于区间\([l,r]\)的贡献是其最高次幂。首先考虑离线做法,扫描线,线段树维护答案。将当前加入的数\(a_i\)分解成\(p_i^{k_i}\),我们有一个暴......
  • 解决 Vue 重复点击相同路由,出现 Uncaught (in promise) NavigationDuplicated: Avoide
    解决Vue重复点击相同路由,出现Uncaught(inpromise)NavigationDuplicated:Avoidedredundantnavigation问题问题问题描述:重复点击导航时,控制台出现报错,虽然不影响功能使用,但也不能视而不见。解决方案方案一:只需在router文件夹下,添加如下代码。constrouter=new......