CodeForces - 1084C The Fair Nut and String(有趣的题目)多解

这篇博客详细介绍了CodeForces的一道题目1084C,即The Fair Nut和String问题。主要内容包括题目的核心要求,即寻找符合条件的特定序列,并提供了三种不同的解决方案:数学思维法、直接思维法和动态规划法。每种方法都通过实例解释了如何将原问题转化为数学问题或通过递推计算找到答案。
摘要由CSDN通过智能技术生成

题目大意:

给你一个由小写字母组成的字符串 s ,让你找一种序列:

1、对于任意一个 i ,使得 s[ p[ i ] ] == ‘a’

2、对于任意一个 i ,存在 p[ i ] < j < p[i + 1],且s[ p[ i ] ] == ‘b’

求这种序列有多少个,答案 mod 1e9

解法一: 数学 + 思维

思路:把字符串换成这样aabaaabaabaa(有多个b就把它缩为一个),相当于有若干个b把a分成了若干块,这样转变成数学问题,对于每个块的大小ai,我都有ai+1种选法,答案乘以ai+1即可,算完之后ans-1就是真正的答案,为什么要减一,因为每块都可以不选,那么有一种非法情况是所有块都不选,所以要减一。

注意细节

#include<bits/stdc++.h>
using namespace std;
//string s[210];
//bool vis[110];
typedef long long ll;
const int maxn = 3e6 + 5;
const int mod = 1e9 + 7;

char s[maxn];
int main(){
   
    cin >> s ;
    int  n = strlen(s);
    ll ans = 1,res = 1;
    for(int  i = 0 ; i < n ; i++){
   
        if(s[i]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值