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;
    }
    
  • 相关阅读:
    windows下安装mysql教程
    python生成器实现杨辉三角
    python默认参数问题
    python中判断素数的函数
    extract()和extact_first()的区别
    硬连接和软连接的区别
    du与df的区别
    命题逻辑
    关于 better-scroll 设置了以后无法滚动或不生效的问题
    Maven *IDEA*
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/12864905.html
Copyright © 2011-2022 走看看