zoukankan      html  css  js  c++  java
  • HUST 1599 Multiple

      题目大意  是给你一个字符串,问其中有多少个字串代表的数字能被64整除(注意不能有前导0 且 单独的'0'也是可以的)。    这题里的64是有些特殊的,,,因为1000000刚好能够整除64,这里就是突破口。    先预处理出字符串中不为0的数字的前缀和,,然后嵌套两个循环,将下标i从0扫到n-6,每次再暴搜i至i+6内的能整除64的个数,   再加上i下标的前缀和的数值。   

      放代码吧。。。:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <algorithm>
     4 #include <cstring>
     5 #include <cmath>
     6 #include <cstdlib>
     7 #include <cctype>
     8 #include <queue>
     9 #include <stack>
    10 #include <map>
    11 #include <vector>
    12 #include <set>
    13 #include <utility>
    14 #define ll long long
    15 #define inf 0x3f3f3f3f
    16 using namespace std;
    17 
    18 char str[300005];
    19 int len;
    20 int front_sum[300005];
    21 void init()  //预处理前缀和
    22 {
    23     len=strlen(str);
    24     front_sum[0]=!!(str[0]-'0');
    25     for(int i=1;i<len-6;i++)
    26         if(str[i]-'0')
    27             front_sum[i]=front_sum[i-1]+1;
    28         else
    29             front_sum[i]=front_sum[i-1];
    30 }
    31 ll solve()
    32 {
    33     ll res=0;
    34     for(int i=0;i<len;i++)
    35     {
    36         int num=0;
    37         if(str[i]=='0') //如果为0则也是一种情况
    38             res++;
    39         for(int j=0;j<6&&i+j<len;j++) //暴搜6位以内的个数
    40         {
    41             num=num*10+str[i+j]-'0';
    42             if(num%64==0&&str[i]!='0') //不能有前导0存在
    43                 res++;
    44         }
    45         if(num%64==0&&i+5<len&&i>0) //num为64倍数 且 该i到j这段的长度>=6 且 i不为第一个
    46             res+=front_sum[i-1];
    47     }
    48     return res;
    49 }
    50 int main()
    51 {
    52     //freopen("input.txt","r",stdin);
    53     while(scanf("%s",str)!=EOF)
    54     {
    55         init();
    56         ll res=solve();
    57         printf("%lld
    ",res);
    58     }
    59     return 0;
    60 }
  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/geek1116/p/5685108.html
Copyright © 2011-2022 走看看