码迷,mamicode.com
首页 > 其他好文 > 详细

Full_of_Boys训练2

时间:2018-04-22 00:59:22      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:eof   print   his   its   scanf   microsoft   mil   pass   tar   

题目来源::西安电子科技大学第16届程序设计竞赛网络同步赛

E.Xieldy And His Password

dp[i][j]表示以i这一位为最高位,模3等于j的方法数。那么转移就是:t=(j*2+a[i])%3 ,dp[i][t] = dp[i-1][j]; 还有一个转移是只包含第i位的方案所以dp[a[i]]]++;

#include <bits/stdc++.h>
typedef long long ll;
using namespace std;
char s[1000007];
ll dp[1000007][3];
int main(){
    while(~scanf(" %s",s)) {int len=strlen(s);
        memset(dp,0,sizeof(dp));
        ++dp[0][s[0]-‘0‘];
        for(int i=1;i<len;++i){
            for(int j=0;j<3;++j){
                int t = (2*j%3+s[i]-‘0‘)%3;
                dp[i][t]=dp[i-1][j];
            }
            ++dp[i][s[i]-‘0‘];
        }
        ll ans = 0;
        for(int i=0;i<len;++i)ans+=dp[i][0];
        printf("%lld\n",ans);
    }
}

 

  

 

Full_of_Boys训练2

标签:eof   print   his   its   scanf   microsoft   mil   pass   tar   

原文地址:https://www.cnblogs.com/RRRR-wys/p/8904593.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!