首页 > 其他分享 >Codeforces 1178B WOW Factor

Codeforces 1178B WOW Factor

时间:2024-05-17 19:55:52浏览次数:25  
标签:1178B int WOW Codeforces Factor ll define

题目简述

给定一个只含 $v$ 和 $o$ 的字符串 $s$,求字符串中有多少个 $wow$(一个 $w$ 即为连续的两个 $v$)。

题目分析

考虑枚举每一个 $o$,设下标为 $i$,统计它左边和右边各有多少个 $w$,分别设为 $a_{i-1}$ 和 $b_{i+1}$,依据乘法原理,将它们乘起来即为答案,累加即可。

接下来,考虑怎么处理右边出 $w$ 的个数,$a_i$ 表示区间 $[1,i]$ 中有多少个 $w$,如果当前的 $s_i=o$,那么则从 $a_{i-1}$ 转移即可,如果当前 $s_i=v$,那要分两种情况:

  • 如果 $s_{i-1}=o$,那么就组合不成 $w$,即 $a_i \leftarrow a_{i-1}$。
  • 如果 $s_{i-1}=v$,那么 $s_i$ 就可以与 $s_{i-1}$ 组合成一个 $w$,即 $a_i \leftarrow a_{i-1}+1$。

知道了左边怎么处理,右边也同理,反着做就可以了。

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define random(a,b) (rand()%(b-a+1)+a)
#define se second
#define fi first
#define pr pair<int,int>
#define pb push_back
#define ph push
#define ft front
#define For(i,a,b) for(int i=a;i<=b;i++)
#define Rep(i,a,b) for(int i=a;i>=b;i--)
#define mem(a,b) memset(a,b,sizeof a)
const int N=1e6+10;
char s[N];
int n;
ll a[N],b[N],ans;
int main()
{
	ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>s+1;
    n=strlen(s+1);
    For(i,1,n) a[i]=a[i-1]+(s[i]=='v'&&s[i-1]=='v');
    Rep(i,n,1) b[i]=b[i+1]+(s[i]=='v'&&s[i+1]=='v');
    For(i,1,n)
    {
    	if(s[i]=='o')
    	{
    		ans+=(ll)a[i-1]*b[i+1];
		}
	}
	cout<<ans;
	return 0;
}

标签:1178B,int,WOW,Codeforces,Factor,ll,define
From: https://www.cnblogs.com/zhuluoan/p/18198529

相关文章

  • Codeforces 1037C Equalize 题解
    题目描述给定两个长度为$n$的$01$序列$a,b$。每次可以执行如下操作:在$a$中选择一个位置$p$,将$a_p$变为$1-a_p$,代价是$1$。在$a$中选择两个位置$p,q$,将$a_p$和$a_q$互换,代价是$\lvertq-p\rvert$。问最少需要多少代价才能将$a$变成$b$。题目分析......
  • Codeforces 1004B Sonya and Exhibition 题解
    题目简述让你构造一个长度为$n$的$01$字符串。一个区间的价值为其中$0$的数量乘以$1$的数量,给出$m$个区间,最大化它们的价值之和。题目分析设区间$[l,r]$中$1$有$x$个,$0$有$y$个,当$x$和$y$最接近的时候,$x\timesy$最大,此结论可以用二次函数进行证明。......
  • Codeforces Round 943 (Div. 3)
    CodeforcesRound943(Div.3)1968D-枚举思路:每个人走的位置最多会形成长度为n的环,所以直接枚举走到某个位置之后后面就不走了的所有情况的最大值,相互比较即可1968E-构造题意:设\(F(A_i,A_j)=|x_i-x_y|+|y_i-y_j|\),在\(N*N\)的矩阵中选n个点使所有不同的\(F(A_i,A_j)=|x_i-......
  • Codeforces Round 944 (Div. 4) 补题
    A.MyFirstSortingProblemYouaregiventwointegersxandy.Outputtwointegers:theminimumofxandy,followedbythemaximumofxandy.题意:给你两个整数求出最小值和最大值Code:#include<bits/stdc++.h> usingnamespacestd;#definedebug(x)cer......
  • Codeforces 832E Vasya and Shifts
    考虑到这个操作实际上就是\(5\)进制的不进位加法,其实也就是\(5\)进制下的异或。同时因为是\(5\)进制,对于\(x\in[1,4]\),\(x\times0,\cdots,x\times4\)刚好可以表示出\(0\sim4\)。于是可以考虑类似\(2\)进制的线性基弄个\(5\)进制的线性基。即令\(w_i\)为......
  • Codeforces 1971H ±1
    考虑到因为只有\(3\)行,所以第\(2\)行为\(1\)的条件就是\(1\)的个数\(\ge2\)。对于这种只能去正负且有无解的问题,可以想到用个\(\text{2-SAT}\)。于是接下来考虑用\(\operatorname{AND},\operatorname{OR},\operatorname{XOR}\)来表示至少有\(2\)个\(1\)。考......
  • Codeforces 1761D Carry Bit
    令\(c_i\)为第\(i\)位带来的进位的值,令\(c_{-1}=0\)。考虑如果知道了\(c_{i-1},c_i\)的值,\(a_i,b_i\)有多少种选法:\(c_{i-1}=0,c_i=0\),\((a_i,b_i)=(0,0),(0,1),(1,0)\)。\(c_{i-1}=1,c_i=1\),\((a_i,b_i)=(1,1),(0,1),(1,0)\)。......
  • Codeforces 295D Greg and Caves
    首先可以只考虑有效的行(有黑格的),设有\(h\)行,那么就有\(n-h+1\)种分配方式,最后\(\times(n-h+1)\)即可。对于有效的行,发现如果要考虑中间的部分\([l,r]\)其实可以只用\(len=r-l+1\)来表示。当然肯定会漏掉一些方案的,但考虑知道了\(\max\{len\}\)之后,......
  • Codeforces 1146D Frog Jumping
    首先根据裴蜀定理,能走到的点\(x\)肯定满足\(\gcd(a,b)|x\)。于是令\(g=\gcd(a,b)\),可以考虑求解\(\lfloor\frac{m}{g}\rfloor,\frac{a}{g},\frac{b}{g}\),最后记得去判一下\([g\lfloor\frac{m}{g}\rfloor,m]\)这个区间,因为只有这个区间是不满(区间长度可能\(<g\)......
  • CF1787H Codeforces Scoreboard
    CF1787HCodeforcesScoreboard校内测试的一道题,考试时根本没动。。题面考虑\(k\)比较大的放前面肯定优,然后修门挨着放也肯定优,所以先按\(k\)排个序,然后我们就只考虑每个门修不修。设计状态\(f[i][j]\)表示前\(i\)个点,有\(j\)个门取\(b-kt\),少送回去的最少......