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

Codeforces 682B New Skateboard(DP)

时间:2016-07-17 09:46:17      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

题目大概说给一个数字组成的字符串问有几个子串其代表的数字(可以有前导0)能被4整除。

  • dp[i][m]表示字符串0...i中mod 4为m的后缀的个数
  • 通过在i-1添加str[i]字符转移,或者以str[i]为新后缀的开头转移
 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 char str[333333];
 5 long long d[333333][4];
 6 int main(){
 7     scanf("%s",str);
 8     for(int i=0; str[i]; ++i){
 9         ++d[i][(str[i]-0)%4];
10         for(int j=0; j<4; ++j){
11             d[i+1][(j*10+str[i+1]-0)%4]+=d[i][j];
12         }
13     }
14     long long ans=0;
15     for(int i=0; str[i]; ++i){
16         ans+=d[i][0];
17     }
18     printf("%lld",ans);
19     return 0;
20 }

 

Codeforces 682B New Skateboard(DP)

标签:

原文地址:http://www.cnblogs.com/WABoss/p/5677278.html

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