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

HUST - 1599 Multiple

时间:2015-11-02 19:17:07      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

input

长度不大于3*10e5的数字串

output

不含前导0的能整除64的字串的个数(0算一个,064不算)

一般数组中找能整除一个数的字串都是用取余来做的

用一个a[64]来存下从1-i位累加到第i位的余数为0-63的个数,每次都加上余数为0的个数,第一位为0的只统计一次,不加入a数组中

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 char s[300010];
 8 int a[2][64],b[64],sum,d;
 9 
10 int main()
11 {
12     while(scanf("%s",s)==1)
13     {
14         memset(a,0,sizeof(a));
15         sum=0;
16         d=1;
17         for(int i=0;s[i];i++)
18         {
19             memset(a[d^1],0,sizeof(a[0]));
20             if(s[i]!=0) a[d][0]++;
21             else sum++;
22             for(int j=0;j<64;j++)
23             {
24                 int t=j*10+s[i]-0;
25                 a[d^1][t%64]+=a[d][j];
26             }
27             sum+=a[d^1][0];
28             d^=1;
29         }
30         printf("%d\n",sum);
31     }
32     return 0;
33 }
View Code

 

HUST - 1599 Multiple

标签:

原文地址:http://www.cnblogs.com/cdyboke/p/4930726.html

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