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;
    }
    
  • 相关阅读:
    WebSocket
    Redis
    Memcached
    Python实现支付宝在线支付
    RabbitMQ
    linux内核优化
    kafka资源
    推荐相关
    机器学习好网站
    逻辑回归(logistic regression)的本质——极大似然估计
  • 原文地址:https://www.cnblogs.com/shuitiangong/p/12864905.html
Copyright © 2011-2022 走看看