zoukankan      html  css  js  c++  java
  • Codeforces 1084C The Fair Nut and String(乘法原理和加法原理)

    题目链接

    题目大意

      问给定的字符串有多少形如"a","aba","ababa"...的子串.

    解题思路

      这题需要考虑将字符'b'做分隔符,把每个含'a'不含'b'的区间分隔开,那么就很好解决了.
      对于第一个区间的'a',它只能选自己,所以它的选法就是这个区间'a'的数量;对于第二个区间,它有两种选择,一种是与上一个区间的子串结合,还有一种是不与前面的结合,只选自己,那么选法就是这个区间的'a'的数量乘以上一个区间所有符合条件的子串数量再加上这个区间的'a'的数量;对于第三个区间,也是两种选法...
      所以说从左到右每个区间可以形成的子串数量可以根据前面的结果递推出来,最终的结果就是所有区间可以形成的子串数量之和.

    代码

    const int maxn = 2e5+10;
    char str[maxn] = "%";
    int main(){
    	cin >> str+1;
    	int len = strlen(str);
    	str[len] = 'b';
    	ll ans = 0;
    	for (int i = 1, cnt = 0; i<=len; ++i) {
    		if (str[i]=='a') ++cnt;
    		else if (str[i]=='b'&&cnt) {
    			ans = (ans+ans*cnt+cnt)%MOD;
    			cnt = 0;
    		}
    	}
    	cout << ans << endl;
        return 0;
    }
    
  • 相关阅读:
    SQLServer多表联查,多表分页查询
    GOF23种设计模式概括
    常用的正则表达式
    面向对象七大原则
    Jquery简单学习
    MVC图片上传详解
    面向对象OOP概念描述
    C++ 基础命名空间 using namespace std;
    找不到WJSWDLL.dll
    AspectJ中的类型间声明(成员注入)
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/12864905.html
Copyright © 2011-2022 走看看